题目分析
题目描述: 给定一个整数数组 nums 和一个整数 n,数组 nums 表示的是 n 名学生的分数。你的任务是找到数组中第三大的不同分数。如果数组中没有三个不同的分数,则返回数组中的最大分数。
输入:
- 一个整数
n,表示学生人数。 - 一个整数列表
nums,表示学生的分数。
输出:
- 返回数组中第三大的不同分数,如果没有三个不同的分数,则返回数组中的最大分数。
解题思路
- 去重:首先需要去除数组中的重复元素,确保我们只考虑不同的分数。
- 排序:将去重后的数组按降序排序,这样我们就可以很容易地找到第三大的元素。
- 判断:如果去重后的数组长度小于3,说明没有三个不同的分数,此时返回数组中的最大分数;否则返回排序后数组的第三个元素。
from typing import List
def solution(n: int, nums: List[int]) -> int:
unique_scores = sorted(set(nums), reverse=True)
if len(unique_scores) < 3:
return max(unique_scores)
else:
return unique_scores[2]
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()排序这些不同的分数,降序排列。 - 如果去重后得分的长度小于3,说明没有足够的不同分数,因此返回最大分。
- 否则,返回排序后第三个位置上的分数,即第三大的分数。