100297. 找到连续赢 K 场比赛的第一位玩家
有 n
位玩家在进行比赛,玩家编号依次为 0
到 n - 1
。
给你一个长度为 n
的整数数组 skills
和一个 正 整数 k
,其中 skills[i]
是第 i
位玩家的技能等级。skills
中所有整数 互不相同 。
所有玩家从编号 0
到 n - 1
排成一列。
比赛进行方式如下:
这个比赛的赢家是 第一位连续 赢下 k
场比赛的玩家。
请你返回这个比赛的赢家编号。
示例 1:
输入:skills = [4,2,6,3,9], k = 2
输出:2
解释:
一开始,队列里的玩家为 [0,1,2,3,4]
。比赛过程如下:
[0,2,3,4,1]
。[2,3,4,1,0]
。[2,4,1,0,3]
。玩家 2 连续赢了 k = 2
场比赛,所以赢家是玩家 2 。
示例 2:
输入:skills = [2,5,4], k = 3
输出:1
解释:
一开始,队列里的玩家为 [0,1,2]
。比赛过程如下:
[1,2,0]
。[1,0,2]
。[1,2,0]
。玩家 1 连续赢了 k = 3
场比赛,所以赢家是玩家 1 。
提示:
n == skills.length
2 <= n <= 105
1 <= k <= 109
1 <= skills[i] <= 106
skills
中的整数互不相同。原站题解
rust 解法, 执行用时: 8 ms, 内存消耗: 3.6 MB, 提交时间: 2024-10-24 09:00:48
impl Solution { pub fn find_winning_player(skills: Vec<i32>, k: i32) -> i32 { let mut max_i = 0; let mut win = 0; for i in 1..skills.len() { if skills[i] > skills[max_i] { // 打擂台,发现新的最大值 max_i = i; win = 0; } win += 1; // 获胜回合 +1 if win == k { // 连续赢下 k 场比赛 break; } } // 如果 k 很大,那么 max_i 就是 skills 最大值的下标,毕竟最大值会一直赢下去 max_i as _ } }
javascript 解法, 执行用时: 1 ms, 内存消耗: 64.9 MB, 提交时间: 2024-10-24 09:00:34
/** * @param {number[]} skills * @param {number} k * @return {number} */ var findWinningPlayer = function(skills, k) { let maxI = 0, win = 0; for (let i = 1; i < skills.length && win < k; i++) { if (skills[i] > skills[maxI]) { // 打擂台,发现新的最大值 maxI = i; win = 0; } win++; // 获胜回合 +1 } // 如果 k 很大,那么 maxI 就是 skills 最大值的下标,毕竟最大值会一直赢下去 return maxI; };
java 解法, 执行用时: 1 ms, 内存消耗: 59.1 MB, 提交时间: 2024-06-10 00:31:58
class Solution { public int findWinningPlayer(int[] skills, int k) { int mxI = 0; int win = 0; for (int i = 1; i < skills.length && win < k; i++) { if (skills[i] > skills[mxI]) { // 新的最大值 mxI = i; win = 0; } win++; // 获胜回合 +1 } return mxI; } }
cpp 解法, 执行用时: 147 ms, 内存消耗: 116.3 MB, 提交时间: 2024-06-10 00:31:44
class Solution { public: int findWinningPlayer(vector<int>& skills, int k) { int mx_i = 0, win = 0; for (int i = 1; i < skills.size() && win < k; i++) { if (skills[i] > skills[mx_i]) { // 新的最大值 mx_i = i; win = 0; } win++; // 获胜回合 +1 } return mx_i; } };
golang 解法, 执行用时: 117 ms, 内存消耗: 8.4 MB, 提交时间: 2024-06-10 00:31:30
func findWinningPlayer(skills []int, k int) (mxI int) { win := 0 for i := 1; i < len(skills) && win < k; i++ { if skills[i] > skills[mxI] { // 新的最大值 mxI = i win = 0 } win++ // 获胜回合 +1 } return }
python3 解法, 执行用时: 89 ms, 内存消耗: 29 MB, 提交时间: 2024-06-10 00:31:17
class Solution: def findWinningPlayer(self, skills: List[int], k: int) -> int: mx_i = 0 win = -1 # 对于 skills[0] 来说,需要连续 k+1 个回合都是最大值 for i, x in enumerate(skills): if x > skills[mx_i]: # 新的最大值 mx_i = i win = 0 win += 1 # 获胜回合 +1 if win == k: break return mx_i