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

62 阅读3分钟

题目理解

小M希望设定一个合理的目标分数来参加游戏比赛,他想要参考过去比赛中的分数,并将其中的“第三大”分数作为自己的目标。题目给了我们一个数组 nums,其中包含了比赛的分数,可能有重复的分数。我们的任务是根据以下规则来找到小M的目标分数:

  1. 规则 1:如果数组中包含三个或以上不同的分数,那么小M的目标分数就是其中的第三大分数。
  2. 规则 2:如果数组中包含的不同分数少于三个(即只有一个或两个不同的分数),那么小M的目标分数就是最大的分数。

解题思路

为了解决这个问题,我们需要对分数数组进行以下步骤的处理:

  1. 去重:数组中可能包含重复的分数,例如 [2, 2, 3, 1]。要找到第三大的分数,首先需要将数组中的重复分数去掉,得到一组唯一的分数。例如,[2, 2, 3, 1] 去重后得到 [3, 2, 1]

  2. 判断分数种类的数量

    • 如果去重后的分数种类达到三个或以上,说明可以找到第三大的分数。
    • 如果去重后的分数种类不足三个,说明没有足够的分数来确定第三大分数,此时只返回最大的分数。
  3. 排序:将去重后的分数按照从大到小的顺序排序。排序后,分数的顺序会从最高到最低排列,这样可以轻松找到第一、第二和第三大的分数。

  4. 返回目标分数

    • 如果去重后的分数种类多于或等于三个,返回排序后的第三大分数。
    • 如果分数种类少于三个,直接返回排序后最大的分数。

示例详细解释

通过具体示例来说明这个过程:

  • 示例 1

    • 输入n = 3, nums = [3, 2, 1]
    • 去重[3, 2, 1] 中没有重复元素,去重后仍为 [3, 2, 1]
    • 判断分数种类:去重后的分数有 3 个,符合规则 1 的要求。
    • 排序:将 [3, 2, 1] 从大到小排序,排序后为 [3, 2, 1]
    • 返回第三大分数:排序后的第三个元素为 1,所以输出为 1
  • 示例 2

    • 输入n = 2, nums = [1, 2]
    • 去重[1, 2] 中没有重复元素,去重后为 [1, 2]
    • 判断分数种类:去重后的分数只有 2 个,不符合规则 1,因此根据规则 2,返回最大的分数。
    • 返回最大分数:最大分数是 2,所以输出为 2
  • 示例 3

    • 输入n = 4, nums = [2, 2, 3, 1]
    • 去重[2, 2, 3, 1] 去重后为 [3, 2, 1]
    • 判断分数种类:去重后的分数有 3 个,符合规则 1 的要求。
    • 排序:将 [3, 2, 1] 从大到小排序后仍为 [3, 2, 1]
    • 返回第三大分数:排序后的第三个元素是 1,所以输出为 1

特殊情况

  • 只有一个分数:如果数组中所有元素相同,例如 [5, 5, 5],去重后得到 [5]。此时不同分数的数量为 1,根据规则 2 返回最大的分数,即 5
  • 多个重复分数但不足三种:例如 [7, 7, 8, 8],去重后得到 [8, 7],不同分数只有 2 个,不足 3 个,根据规则 2 返回最大的分数,即 8

总结

通过去重、排序和条件判断,能够有效地找到符合题目要求的目标分数。