class Solution {
public:
int getWinner(vector<int>& arr, int k) {
int prev = max(arr[0], arr[1]);
if (k == 1) {
return prev;
}
int consecutive = 1;
int maxNum = prev;
int length = arr.size();
for (int i = 2; i < length; i++) {
int curr = arr[i];
if (prev > curr) {
consecutive++;
if (consecutive == k) {
return prev;
}
} else {
prev = curr;
consecutive = 1;
}
maxNum = max(maxNum, curr);
}
return maxNum;
}
};
该方法接受一个整数向量
arr
和一个整数k
作为输入,并返回一个整数。该方法用于找出在给定数组和k
值的情况下游戏的胜者。游戏的规则如下:从数组的第一个元素开始,将其与下一个元素进行比较。如果当前元素较大,继续将其与后续元素进行比较,直到找到一个比当前元素大的元素,或者已经与
k
个元素进行了比较。如果当前元素小于下一个元素,则将当前元素更新为下一个元素,并重置连续胜利的计数。胜者是最后一个与它连续比较了k
次的元素。方法首先将前一个元素初始化为数组前两个元素中的最大值。如果
k
为 1,则直接返回前一个元素。否则,它将连续胜利的计数初始化为 1,并将迄今为止看到的最大数字初始化为前一个元素。然后,它从数组的第三个元素开始迭代,根据需要更新前一个元素、连续胜利的计数和迄今为止看到的最大数字。如果连续胜利的计数达到k
,则返回前一个元素。如果循环完成而没有找到胜者,则返回迄今为止看到的最大数字。
- 初始化
prev
变量为数组中的最大出价,即arr[0]
和arr[1]
中的较大者。- 如果
k
等于 1,直接返回prev
,因为只有一轮对决,最高出价即为结果。- 初始化
consecutive
变量为 1(因为至少有一轮对决),maxNum
变量为prev
。- 遍历数组
arr
,从索引 2 开始,因为索引 0 和 1 已经被用来初始化prev
和maxNum
。- 对于每一轮,比较
prev
和当前索引i
的出价arr[i]
。
- 如果
prev
高于arr[i]
,说明当前选手连续赢得了一轮,consecutive
增1。
- 如果
consecutive
达到k
,则返回prev
,因为选手已经连续赢得k
轮。- 如果
arr[i]
高于prev
,则重置prev
为arr[i]
,同时重置consecutive
为 1,因为轮到另一个选手了。- 每轮结束后,更新
maxNum
为当前索引i
的出价arr[i]
和maxNum
中的较大者。- 遍历结束后,返回
maxNum
,即数组中的最大出价。