青训营笔记1 | 豆包MarsCode AI刷题

44 阅读3分钟

游戏排名第三大的分数

问题描述

小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


问题理解

我们的任务是根据给定的分数数组,按照特定规则确定小 M 的目标分数。规则是:如果分数数组中有三个或更多不同的分数,就返回其中第三大的分数;而如果不同的分数只有两个或更少,那就选择最大的分数作为目标。

示例分析

  • 样例 1:输入 n = 3(这里 n 表示数组 nums 的长度,不过其实在代码实现中不一定非要用到这个 n,可以直接通过获取数组 nums 的长度来使用),nums = [3, 2, 1]。这个数组中有三个不同的分数 321,按照规则,第三大的分数就是 1,所以输出为 1
  • 样例 2:输入 n = 2nums = [1, 2]。这里数组中只有两个不同的分数,根据规则,此时应选择最大的分数作为目标,所以输出是 2
  • 样例 3:输入 n = 4nums = [2, 2, 3, 1]。数组中有三个不同的分数 231,第三大的分数就是 1,输出为 1

思路

排序法

  1. 首先对给定的分数数组 nums 进行排序,可以使用常见的排序算法,排序后,数组中的元素会按照从小到大的顺序排列。
  2. 然后,我们从数组的末尾开始遍历,统计已经遍历过的不同分数的个数。
  3. 当遍历到的不同分数个数达到第三时,此时对应的分数就是我们要找的第三大的分数。如果在遍历完整个数组后,不同分数的个数都没有达到三个,那就说明不同分数只有两个或更少,按照规则,我们返回数组中的最大分数,也就是排序后数组的最后一个元素。

代码如下

import java.util.Arrays;
 
public class Main {
    public static int solution(int n, int[] nums) {
        if(n==1){
            return nums[0];
        }else if(n==2){
            if(nums[0]<nums[1]){
                return nums[1];
            }else{
                return nums[0];
            }
        }else{
            Arrays.sort(nums);
            int max1 = nums[n - 1];
            int max2 = 0; // 初始化 max2
            int max3 = 0; // 初始化 max3
            int c = -1; // 初始化 c
            for (int i = n - 1; i >= 0; i--) {
                if (nums[i]!= max1) {
                    max2 = nums[i];
                    c = i;
                    break;
                }
            }
            if(c==-1) return max1;
            for (int i = c - 1; i >= 0; i--) {
                if (nums[i]!= max2) {
                    max3 = nums[i];
                    break;
                }
            }
            if(nums[0] == max2) return max1;
            return max3;
        }
    }
 
    public static void main(String[] args) {
        System.out.println(solution(3, new int[]{3, 2, 1}) == 1);
        System.out.println(solution(2, new int[]{1, 2}) == 2);
        System.out.println(solution(4, new int[]{2, 2, 3, 1}) == 1);
    }
}