34.游戏排名第三大的分数 | 豆包MarsCode AI刷题

0 阅读2分钟

游戏排名第三大的分数

问题描述

小M想要通过查看往届游戏比赛的排名来确定自己比赛的目标分数。他希望找到往届比赛中排名第三的分数,作为自己的目标。具体规则如下:

  1. 如果分数中有三个或以上不同的分数,返回其中第三大的分数。
  2. 如果不同的分数只有两个或更少,那么小M将选择最大的分数作为他的目标。

请你帮小M根据给定的分数数组计算目标分数。

思路解析

  1. 根据题目,我们首先需要判断比赛中分数有几种,将大于等于三种分数分为一类,两个或更少分数分为另一类
  2. 在大于等于三种分数的情况下,对全部分数进行排序,获得第三大的分数
  3. 对于不同分数两个或更少情况下,再分两种情况讨论:当不同分数有两个的情况下,取最大的分数返回;当只有一个不同的分数情况下,返回唯一的那个分数

注意事项

  • 题目要求的是对不同分数情况下的排列选取,不是对全部分数进行选取,这里推荐使用去重方法来满足要求
  • 当不同分数小于等于3时,需要分两种情况讨论,需要考虑全部分数均相同的情况

解题步骤

  1. 首先先对整个list进行去重与排列(这里使用集合set来去重,用sorted来排列)
unique_nums = sorted(set(nums), reverse=True)
  1. 对不同情况进行判断,首先对大于等于三种分数判断,取第三大的数字
 if len(unique_nums)>2:
            return unique_nums[2]
  1. 接下来对剩下两种情况判断,对两种分数取最大值,对一种数字取本身
elif len(unique_nums)==2:
            return max(unique_nums[1],unique_nums[0])
        else:
            return unique_nums[0]

完整代码

def solution(n: int, nums: list) -> int:

        unique_nums = sorted(set(nums), reverse=True)
        if len(unique_nums)>2:
            return unique_nums[2]
        elif len(unique_nums)==2:
            return max(unique_nums[1],unique_nums[0])
        else:
            return unique_nums[0]
        # 返回第三大的分数
 

if __name__ == '__main__':
    print(solution(3, [3, 2, 1]) == 1)
    print(solution(2, [1, 2]) == 2)
    print(solution(4, [2, 2, 3, 1]) == 1)

总结时刻

这道题相对容易,但是也有容易被忽视的点,比如需要去重和考虑分数唯一的情况。我第一遍做的时候没有考虑分数唯一和去重的情况,在答案错误后我请AI助手帮我提示,但是AI助手的解答仍然忽略了分数只有一种的情况,这时需要你根据错误样例去思考出错原因,并对代码进行修改,不应过分依赖于AI助手