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

37 阅读2分钟

题目理解

小M想要找到往届比赛中排名第三的分数作为自己的目标分数。具体规则如下:

  1. 如果分数中有三个或以上不同的分数,返回其中第三大的分数。
  2. 如果不同的分数只有两个或更少,那么小M将选择最大的分数作为他的目标。

解题思路

  1. 去重:首先需要去除数组中的重复元素,只保留不同的分数。

  2. 排序:将去重后的分数进行排序,从大到小排列。

  3. 返回目标分数

    • 如果去重后的分数数量大于等于3,返回第三大的分数。
    • 如果去重后的分数数量小于3,返回最大的分数。

数据结构选择

  • 数组:用于存储分数。
  • 集合:用于去重,例如 HashSet

算法步骤

  1. 去重:遍历数组,将不同的分数存入 HashSet

  2. 排序:将 HashSet 中的元素转换为数组,并进行排序。

  3. 返回结果

    • 如果排序后的数组长度大于等于3,返回第三大的分数。
    • 否则,返回最大的分数。

复杂度分析

  • 时间复杂度:O(n log n),主要来自于排序操作。
  • 空间复杂度:O(n),主要用于存储去重后的分数。

代码实现思路

  1. 去重:使用 HashSet 去重。
  2. 排序:将 HashSet 转换为数组并排序。
  3. 返回结果:根据排序后的数组长度返回相应的分数。

详细步骤

1. 去重

去重的目的是为了确保我们只处理不同的分数。可以使用 HashSet 来实现这一点,因为 HashSet 会自动去除重复元素。

3. 返回结果

根据排序后的数组长度返回相应的分数。

总结

这道题目主要考察了对数组去重、排序以及根据条件返回结果的能力。通过使用 HashSet 进行去重,可以有效地去除重复元素,简化后续的排序和查找操作。排序部分使用了 Arrays.sort 方法,并结合 Collections.reverseOrder() 实现了从大到小的排序。最后,根据排序后的数组长度,返回第三大的分数或最大的分数。

在实际编程中,去重和排序是常见的操作,掌握这些操作对于解决类似问题非常有帮助。此外,理解题目要求并根据要求设计算法步骤也是解题的关键。通过这道题目的练习,可以加深对数组操作、集合操作以及排序算法的理解。