问题描述
小M想要通过查看往届游戏比赛的排名来确定自己比赛的目标分数。他希望找到往届比赛中排名第三的分数,作为自己的目标。具体规则如下:
- 如果分数中有三个或以上不同的分数,返回其中第三大的分数。
- 如果不同的分数只有两个或更少,那么小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
代码示例
# 去重
unique_nums = list(set(nums))
# 排序
unique_nums.sort()
# 判断并返回结果
if len(unique_nums) < 3:
return unique_nums[-1] # 返回最大的分数
else:
return unique_nums[-3] # 返回第三大的分数
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)来实现,因为集合自动去除重复元素。
-
排序:接下来,我们需要对去重后的分数进行排序。在Python中,我们可以使用
sort()方法或sorted()函数来对列表进行排序。排序后,我们可以更容易地找到第三大的分数或最大的分数。 -
判断并返回结果:最后,我们需要根据排序后的分数列表的长度来判断应该返回哪个分数。如果列表的长度小于3,我们返回最大的分数(列表的最后一个元素);如果长度大于等于3,我们返回第三大的分数(列表的倒数第三个元素)。
在编写代码时,需要注意以下几点:
-
代码的可读性:代码应该易于理解和维护。例如,我们可以通过清晰的变量命名和注释来提高代码的可读性。
-
效率:虽然这个问题的解决方案在时间复杂度上是可接受的(O(n log n),主要由排序操作决定),但在处理大数据集时,我们可能需要考虑更高效的算法。
-
边界条件的处理:在这个问题中,我们需要确保处理了所有可能的边界条件,例如输入数组为空或只包含一个元素的情况。
通过这个问题,我学习了如何使用集合来去重,如何对列表进行排序,以及如何根据条件逻辑来返回不同的结果。这些问题解决技巧在编程中非常常见,对于提高我的编程能力和解决实际问题的能力非常有帮助。
此外,这个问题也提醒我,在面对实际问题时,我需要仔细阅读和理解问题描述,明确问题的要求和限制条件。这有助于我们设计出更准确、更有效的解决方案。
总的来说,这个问题不仅锻炼了我的基本编程技能,也提高了我的问题解决能力和逻辑思维能力。通过实际编码和思考,我能够更好地理解和掌握这些重要的编程概念。