【分析】先比较前面两个数找出一个较大值max来,这样max赢了一次,记t = 1。接下来拿着max继续和后面比较,如果max又赢了,那么t++,直到t == k就可以直接返回max;如果max在到达t == k之前输了,那么让新的max为赢的那个数,然后重制t为1。如果循环结束后还没达到k,那么此时说明max是数组的最大值,这个最大值肯定能再和放在后面的数比较完成k的目标,所以直接返回max即可。
需要特别注意k == 1这种情况,直接返回最初的max就行!
class Solution {
// 8:56
public int getWinner(int[] arr, int k) {
int t = 1;
int max = Math.max(arr[0], arr[1]);
if (k == 1) return max;
for (var i = 2; i < arr.length; i++) {
if (max > arr[i]) {
t++;
if (t == k) return max;
} else {
max = arr[i];
t = 1;
}
}
return max;
}
}
class Solution {
public:
// 9:04 1
int getWinner(vector<int>& arr, int k) {
int ans = max(arr[0], arr[1]);
int t = 1;
if (k == 1) return ans;
for (auto i = 2; i < arr.size(); i++) {
if (ans > arr[i]) {
if (++t == k) return ans;
} else {
ans = arr[i];
t = 1;
}
}
return ans;
}
};