一、题目
1、题目描述
给你一个由 不同 整数组成的整数数组
arr
和一个整数k
。每回合游戏都在数组的前两个元素(即
arr[0]
和arr[1]
)之间进行。比较arr[0]
与arr[1]
的大小,较大的整数将会取得这一回合的胜利并保留在位置0
,较小的整数移至数组的末尾。当一个整数赢得k
个连续回合时,游戏结束,该整数就是比赛的 赢家 。返回赢得比赛的整数。
题目数据 保证 游戏存在赢家。
2、接口描述
python3
class Solution:
def getWinner(self, arr: List[int], k: int) -> int:
cpp
class Solution {
public:
int getWinner(vector<int>& arr, int k) {
}
};
JavaScript
/**
* @param {number[]} arr
* @param {number} k
* @return {number}
*/
var getWinner = function(arr, k) {
};
3、原题链接
二、解题报告
1、思路分析
一次遍历,如果没遍历完数组,连胜场数就达到k,就返回当前冠军
否则返回数组最大值
2、复杂度
时间复杂度: O(N) 空间复杂度:O(1)
3、代码详解
python3
class Solution:
def getWinner(self, arr: List[int], k: int) -> int:
ret = arr[0]
s = 0
for x in arr[1::]:
if ret < x:
ret = x
s = 1
else:
s += 1
if s == k:
return ret
return ret
cpp
class Solution {
public:
int getWinner(vector<int>& arr, int k) {
int x = arr[0];
for (int i = 1, n = arr.size(), s = 0; i < n && s < k; i ++) {
int y = arr[i];
if (x < y) swap(x, y), s = 1;
else s ++;
}
return x;
}
};
JavaScript
/**
* @param {number[]} arr
* @param {number} k
* @return {number}
*/
var getWinner = function(arr, k) {
let ret = arr[0];
for (let i = 1, s = 0; i < arr.length && s < k; i ++) {
let x = arr[i];
if (ret < x) ret = x, s = 1;
else s ++;
}
return ret;
};