问题描述
小M想要通过查看往届游戏比赛的排名来确定自己比赛的目标分数。他希望找到往届比赛中排名第三的分数,作为自己的目标。具体规则如下:
- 如果分数中有三个或以上不同的分数,返回其中第三大的分数。
- 如果不同的分数只有两个或更少,那么小M将选择最大的分数作为他的目标。
请你帮小M根据给定的分数数组计算目标分数。
测试样例
样例1:
输入:
n = 3, nums = [3, 2, 1]输出:1
样例2:
输入:
n = 2, nums = [1, 2]输出:2
样例3:
输入:
n = 4, nums = [2, 2, 3, 1]输出:1
解题思路
-
理解问题:我们需要找到数组中第三大的不同分数。如果不同的分数少于三个,则返回最大的分数。
-
数据结构选择:可以使用集合(set)来存储不同的分数,因为集合会自动去重。
-
算法步骤:
- 将数组转换为集合以去除重复元素。
- 如果集合的大小大于等于3,则返回集合中第三大的元素。
- 如果集合的大小小于3,则返回集合中最大的元素。
def solution(n: int, nums: list) -> int:
# write code here
nums = set(nums)
if len(nums) < 3:
return max(nums)
else:
sorted_nums = sorted(nums)
return sorted_nums[-3]
return 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)