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

71 阅读1分钟

题目分析

题目描述: 给定一个整数数组 nums 和一个整数 n,数组 nums 表示的是 n 名学生的分数。你的任务是找到数组中第三大的不同分数。如果数组中没有三个不同的分数,则返回数组中的最大分数。

输入

  • 一个整数 n,表示学生人数。
  • 一个整数列表 nums,表示学生的分数。

输出

  • 返回数组中第三大的不同分数,如果没有三个不同的分数,则返回数组中的最大分数。

解题思路

  1. 去重:首先需要去除数组中的重复元素,确保我们只考虑不同的分数。
  2. 排序:将去重后的数组按降序排序,这样我们就可以很容易地找到第三大的元素。
  3. 判断:如果去重后的数组长度小于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,说明没有足够的不同分数,因此返回最大分。
  • 否则,返回排序后第三个位置上的分数,即第三大的分数。