返回

C/C++ 描述 LeetCode 5476. 找出数组游戏的赢家

发布时间:2023-07-25 08:51:59 280
# 数据

5476. 找出数组游戏的赢家

  大家好,我叫亓官劼(qí guān jié )


给你一个由 不同 整数组成的整数数组 ​​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​

5476. 找出数组游戏的赢家 题解

这里我们切记不要真实的去移动数组,这里只需要模拟移动即可,我们通过双指针来指向相应的位置即可。

class Solution {
public:
int getWinner(vector<int>& arr, int k) {
int len = arr.size();
if(k >= len){
// 返回最大值
sort(arr.begin(),arr.end());
if(arr[0] >= arr[len-1]){
return arr[0];
}else
return arr[len-1];
}

int i,j,cnt,ans;
cnt = 0;
ans = -0x7f7f7f7f;
for(i = 0, j = 1;i < len && j < len && cnt < k;){
if(arr[i] >= arr[j]){
if(arr[i] == ans){
cnt++;
}else{
ans = arr[i];
cnt = 1;
}
j++;
}else{
if(arr[j] == ans){
cnt++;
}else{
ans = arr[j];
cnt = 1;
}
i = j;
j++;
}
}
return ans;
}
};

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线