题目理解
小M希望设定一个合理的目标分数来参加游戏比赛,他想要参考过去比赛中的分数,并将其中的“第三大”分数作为自己的目标。题目给了我们一个数组 nums,其中包含了比赛的分数,可能有重复的分数。我们的任务是根据以下规则来找到小M的目标分数:
- 规则 1:如果数组中包含三个或以上不同的分数,那么小M的目标分数就是其中的第三大分数。
- 规则 2:如果数组中包含的不同分数少于三个(即只有一个或两个不同的分数),那么小M的目标分数就是最大的分数。
解题思路
为了解决这个问题,我们需要对分数数组进行以下步骤的处理:
-
去重:数组中可能包含重复的分数,例如
[2, 2, 3, 1]。要找到第三大的分数,首先需要将数组中的重复分数去掉,得到一组唯一的分数。例如,[2, 2, 3, 1]去重后得到[3, 2, 1]。 -
判断分数种类的数量:
- 如果去重后的分数种类达到三个或以上,说明可以找到第三大的分数。
- 如果去重后的分数种类不足三个,说明没有足够的分数来确定第三大分数,此时只返回最大的分数。
-
排序:将去重后的分数按照从大到小的顺序排序。排序后,分数的顺序会从最高到最低排列,这样可以轻松找到第一、第二和第三大的分数。
-
返回目标分数:
- 如果去重后的分数种类多于或等于三个,返回排序后的第三大分数。
- 如果分数种类少于三个,直接返回排序后最大的分数。
示例详细解释
通过具体示例来说明这个过程:
-
示例 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。
总结
通过去重、排序和条件判断,能够有效地找到符合题目要求的目标分数。