题目理解
问题描述:
- 小M想要通过查看往届游戏比赛的排名来确定自己比赛的目标分数。
- 他希望找到往届比赛中排名第三的分数,作为自己的目标。
- 如果分数中有三个或以上不同的分数,返回其中第三大的分数。
- 如果不同的分数只有两个或更少,那么小M将选择最大的分数作为他的目标。
数据结构选择
-
集合(
set):- 使用集合来存储不同的分数,这样可以自动去重。
- 集合的特性使得我们不需要手动处理重复的分数。
-
列表(
list):- 将集合转换为列表,并对其进行排序。
- 列表可以方便地进行排序和访问特定位置的元素。
算法步骤
-
去重:
- 将输入的分数数组转换为集合,以去除重复的分数。
-
排序:
- 将集合转换为列表,并对其进行降序排序。
-
判断并返回结果:
- 如果排序后的列表长度大于等于3,返回列表中的第三个元素(即第三大的分数)。
- 否则,返回列表中的第一个元素(即最大的分数)。
代码实现
def solution(n: int, nums: list) -> int:
# 使用集合去重
unique_scores = set(nums)
# 将集合转换为列表并排序
sorted_scores = sorted(unique_scores, reverse=True)
# 判断列表长度并返回结果
if len(sorted_scores) >= 3:
return sorted_scores[2] # 返回第三大的分数
else:
return sorted_scores[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)
关键点总结
-
去重:
- 使用集合(
set)来去除重复的分数。
- 使用集合(
-
排序:
- 使用
sorted()函数对集合进行降序排序。
- 使用
-
判断并返回结果:
- 根据排序后的列表长度,返回第三大的分数或最大的分数。
测试样例
-
样例1:
- 输入:
n = 3, nums = [3, 2, 1] - 输出:
1 - 解释:数组中有三个不同的分数,第三大的分数是1。
- 输入:
-
样例2:
- 输入:
n = 2, nums = [1, 2] - 输出:
2 - 解释:数组中只有两个不同的分数,最大的分数是2。
- 输入:
-
样例3:
- 输入:
n = 4, nums = [2, 2, 3, 1] - 输出:
1 - 解释:数组中有三个不同的分数,第三大的分数是1。
- 输入: