您的当前位置:首页正文

leetcode3175. 找到连续赢 K 场比赛的第一位玩家,方向和细节不对,努力白费

2024-11-29 来源:个人技术集锦

最开始思路

看到题目的示例,只要比较数组的前2位,就好了,但是要一直变化这个数组的值的位置

被题目的示例误导了

没有细品题意,折腾半天,原来就是不断更新最大值,及重新计数

public int findWinningPlayer(int[] skills, int k) {
        int maxI = 0;
        int win = 0;
        int len = skills.length;
        for (int i = 1; i < len && win < k; i++) {
            // 打擂台,发现新的最大值,且清零获胜回合
            if (skills[i] > skills[maxI]) {
                maxI = i;
                win = 0;
            }
            // 获胜回合 +1
            win++;
        }
        // 如果 k 很大,那么 maxI 就是 skills 最大值的下标,毕竟最大值会一直赢下去
        return maxI;
    }

写python的时候,仿造java的思路,也遇到坑

错误

from typing import List


def findWinningPlayer(self, skills: List[int], k: int) -> int:
    maxInt = 0
    win = 0
    len = len(skills)
    for i in range(1, len):
        if skills[i] > skills[maxInt]:
            maxInt = i
            win = 0
            win += 1
        else:
            win += 1
            if win >= k:
                return maxInt
    return 0

正确

def findWinningPlayer(self, skills: List[int], k: int) -> int:
    max_i = win = 0
    for i in range(1, len(skills)):
        # 打擂台,发现新的最大值
        if skills[i] > skills[max_i]: 
            max_i = i
            win = 0
        # 获胜回合 +1
        win += 1
        # 连续赢下 k 场比赛
        if win == k: 
            break
    # 如果 k 很大,那么 max_i 就是 skills 最大值的下标,毕竟最大值会一直赢下去
    return max_i

总结

“”错就错在,我加1个else,

再深入一点认识,就是没看到“第一位连续

再深入一些,自己的警觉性不够,对细节的把控,还要加强,及识别出关键信息的能力要加强

同时,做任何事情,磨刀不误砍柴工,都要确保大方向正确的前提下,再去操刀做事,粗中有细,才能无往不利!

显示全文