游戏排名

98 阅读2分钟

题目理解

问题描述

  • 小M想要通过查看往届游戏比赛的排名来确定自己比赛的目标分数。
  • 他希望找到往届比赛中排名第三的分数,作为自己的目标。
  • 如果分数中有三个或以上不同的分数,返回其中第三大的分数。
  • 如果不同的分数只有两个或更少,那么小M将选择最大的分数作为他的目标。

数据结构选择

  1. 集合(set

    • 使用集合来存储不同的分数,这样可以自动去重。
    • 集合的特性使得我们不需要手动处理重复的分数。
  2. 列表(list

    • 将集合转换为列表,并对其进行排序。
    • 列表可以方便地进行排序和访问特定位置的元素。

算法步骤

  1. 去重

    • 将输入的分数数组转换为集合,以去除重复的分数。
  2. 排序

    • 将集合转换为列表,并对其进行降序排序。
  3. 判断并返回结果

    • 如果排序后的列表长度大于等于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)

关键点总结

  1. 去重

    • 使用集合(set)来去除重复的分数。
  2. 排序

    • 使用sorted()函数对集合进行降序排序。
  3. 判断并返回结果

    • 根据排序后的列表长度,返回第三大的分数或最大的分数。

测试样例

  • 样例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。