游戏排名第三大的分数
问题描述
小M想要通过查看往届游戏比赛的排名来确定自己比赛的目标分数。他希望找到往届比赛中排名第三的分数,作为自己的目标。具体规则如下:
- 如果分数中有三个或以上不同的分数,返回其中第三大的分数。
- 如果不同的分数只有两个或更少,那么小M将选择最大的分数作为他的目标。
请你帮小M根据给定的分数数组计算目标分数。
思路解析
- 根据题目,我们首先需要判断比赛中分数有几种,将大于等于三种分数分为一类,两个或更少分数分为另一类
- 在大于等于三种分数的情况下,对全部分数进行排序,获得第三大的分数
- 对于不同分数两个或更少情况下,再分两种情况讨论:当不同分数有两个的情况下,取最大的分数返回;当只有一个不同的分数情况下,返回唯一的那个分数
注意事项
- 题目要求的是对不同分数情况下的排列选取,不是对全部分数进行选取,这里推荐使用去重方法来满足要求
- 当不同分数小于等于3时,需要分两种情况讨论,需要考虑全部分数均相同的情况
解题步骤
- 首先先对整个list进行去重与排列(这里使用集合set来去重,用sorted来排列)
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]
完整代码
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助手