11月7日刷题——游戏排名第三大的分数(简单)| 豆包MarsCode AI刷题

116 阅读2分钟

一、题目

问题描述

小M想要通过查看往届游戏比赛的排名来确定自己比赛的目标分数。他希望找到往届比赛中排名第三的分数,作为自己的目标。具体规则如下:

  1. 如果分数中有三个或以上不同的分数,返回其中第三大的分数。
  2. 如果不同的分数只有两个或更少,那么小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

二、解题思路

题目要求从给定的分数列表中找出第三大的不同分数。如果列表中不同的分数少于三个,则返回列表中的最大值。 在解题和思考过程中,遇到的主要难点在于: 去除重复分数:在Python中,如何有效地去除列表中的重复元素? 判断不同分数的数量:如何确定处理后的集合中元素的数量? 排序与选择:如何从集合中快速找到第三大的元素? 特殊情况处理:当不同的分数少于三个时,需要返回最大的分数。

主要分为以下三个板块,首先对重复元素去重,这个可以用到set,然后按题目要求分为两种逻辑解题,即数量小于3和大于等于3:

1.如何有效地去除列表中的重复元素?

解决方案为:使用set数据结构。集合自动去除重复元素。

题解中即如下:

unique_nums = set(nums)

2.逻辑1:如果分数数量小于3,则直接返回最大值。

题解即如下:

if len(unique_nums) < 3:
    return max(unique_nums)

3.逻辑2:如果不满足逻辑1,则排序并返回其中第三大的数。

这里要注意要获取排名第三位的数应该在sorted_num中索引为2,题解即如下:

    sorted_nums = sorted(unique_nums, reverse=True)
    return sorted_nums[2]

三、题解

综上所述,最终的题解如下:

def solution(n: int, nums: list) -> int:
    # 使用集合去重,确保每个分数只出现一次
    unique_nums = set(nums)
    
    # 如果不同的分数少于3个,直接返回最大值
    if len(unique_nums) < 3:
        return max(unique_nums)
    
    # 否则,转换为列表并排序,取倒数第三个元素
    sorted_nums = sorted(unique_nums, reverse=True)
    return sorted_nums[2]

整体看来,我认为本题解题的关键在于利用集合去除重复元素,然后根据不同的情况选择合适的逻辑来返回结果。