• 刷题-力扣-1535. 找出数组游戏的赢家


    1535. 找出数组游戏的赢家

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/find-the-winner-of-an-array-game/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    给你一个由 不同 整数组成的整数数组 arr 和一个整数 k 。
    每回合游戏都在数组的前两个元素(即 arr[0] 和 arr[1] )之间进行。比较 arr[0] 与 arr[1] 的大小,较大的整数将会取得这一回合的胜利并保留在位置 0 ,较小的整数移至数组的末尾。当一个整数赢得 k 个连续回合时,游戏结束,该整数就是比赛的 赢家 。
    返回赢得比赛的整数。
    题目数据 保证 游戏存在赢家。

    示例 1:

    输入:arr = [2,1,3,5,4,6,7], k = 2
    输出:5
    解释:一起看一下本场游戏每回合的情况:
    

    因此将进行 4 回合比赛,其中 5 是赢家,因为它连胜 2 回合。
    

    示例 2:

    输入:arr = [3,2,1], k = 10
    输出:3
    解释:3 将会在前 10 个回合中连续获胜。
    

    示例 3:

    输入:arr = [1,9,8,2,3,7,6,4,5], k = 7
    输出:9
    

    示例 4:

    输入:arr = [1,11,22,33,44,55,66,77,88,99], k = 1000000000
    输出:99
    

    提示:

    • 2 <= arr.length <= 10^5
    • 1 <= arr[i] <= 10^6
    • arr 所含的整数 各不相同 。
    • 1 <= k <= 10^9

    题目分析

    1. 根据题目描述选择一个连续大k轮的数
    2. 比较次数k不大于arr的长度,当k大于arr的长度后,arr.size()轮之后的比较都是重复的
    3. 设置一个始终指向较大的数的指针maxIndex
    4. 当maxIndex指向的数连续获胜k次后,maxIndex指向的数即为所求

    代码

    
    class Solution {
    public:
        int getWinner(vector<int>& arr, int k) {
            int t = k > arr.size() ? arr.size() : k;
            int maxIndex = 0;
            int flag = maxIndex + 1;
            while (t > 0 && flag != maxIndex) {
                if (flag >= arr.size()) flag = 0;
                if (arr[maxIndex] >= arr[flag]) t--;
                else {
                    maxIndex = flag;
                    t = k > arr.size() ? arr.size() : k - 1;
                }
                flag++;
            }
            return arr[maxIndex];
        }
    };
    
  • 相关阅读:
    简单使用SQLite 的增删改查
    androidd 程序默认安装位置和数据存储位置(公用和私用)
    git用法demo
    jQuery动态赋值给选择器
    无法访问虚拟机web服务
    日志-demo
    vitualbox + centos出现问题整理
    安全基础术语
    vs2010+qt4.8.6
    redis高并发
  • 原文地址:https://www.cnblogs.com/HanYG/p/14512063.html
Copyright © 2020-2023  润新知