问题描述
小M想要通过查看往届游戏比赛的排名来确定自己比赛的目标分数。他希望找到往届比赛中排名第三的分数,作为自己的目标。具体规则如下:
- 如果分数中有三个或以上不同的分数,返回其中第三大的分数。
- 如果不同的分数只有两个或更少,那么小M将选择最大的分数作为他的目标。
请你帮小M根据给定的分数数组计算目标分数。
解题思路
-
理解问题:我们需要找到数组中第三大的不同分数。如果不同的分数少于三个,则返回最大的分数。
-
数据结构选择:可以使用集合(set)来存储不同的分数,因为集合会自动去重。
-
算法步骤:
- 将数组转换为集合以去除重复元素。
- 如果集合的大小大于等于3,则返回集合中第三大的元素。
- 如果集合的大小小于3,则返回集合中最大的元素。
代码
def solution(n: int, nums: list) -> int:
# write code here
nums = set(nums)
if len(nums) < 3:
return max(nums)
else:
sorted_nums = sorted(nums)
return sorted_nums[-3]
return 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)
知识总结
- 集合:Python 中的
set是一个无序且不重复的数据结构,非常适合用于去重。 - 列表排序:使用
sorted()函数可以方便地对列表进行排序,通过参数reverse=True可以实现降序排序。 - 时间复杂度意识:在处理大量数据时,应考虑算法的时间复杂度。对于此题,虽然使用了排序,但考虑到数据量一般不大,这样的方法是可行的。
学习计划
- 制定目标:设定短期和长期的学习目标,如每周完成一定数量的题目。
- 定期回顾:每周末或每月末回顾错题,加深理解并巩固知识点。
- 多样化练习:除了刷题外,还可以阅读相关书籍、观看教学视频等,多角度学习。
- 交流分享:加入学习小组,与他人讨论问题,互相帮助。
工具运用
- AI辅助学习:利用豆包MarsCode AI提供的智能化建议,针对性地解决自己的薄弱环节。
- 结合其他资源:将AI刷题与在线课程、编程社区等资源相结合,形成互补的学习体系。
- 实践项目:理论学习后,尝试参与实际项目开发,将所学知识应用到实践中,增强实战能力。