青训营 X 豆包MarsCode 技术训练营--游戏排名第三大的分数

问题描述

小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

解题思路

去重:使用 Set 来存储数组中的不同分数。
排序:将 Set 中的分数转换为列表并进行排序。
选择目标分数:
    如果列表中有三个或以上的不同分数,返回第三大的分数。
    否则,返回最大的分数。

详细步骤

去重:使用 Set 来存储数组中的不同分数。
排序:将 Set 转换为 List 并进行降序排序。
选择目标分数:
    如果列表长度大于等于3,返回第三大的分数。
    否则,返回列表中的第一个元素(即最大分数)。

代码

import java.util.*;
public class Main {
public static int solution(int n, int[] nums) {
// 使用 Set 去重
Set uniqueNums = new HashSet<>();
for (int num : nums) {
uniqueNums.add(num);
}

       // 将 Set 转换为 List 并排序
       List<Integer> sortedNums = new ArrayList<>(uniqueNums);
       Collections.sort(sortedNums, Collections.reverseOrder());
       
       // 选择目标分数
       if (sortedNums.size() >= 3) {
           return sortedNums.get(2);  // 返回第三大的分数
       } else {
           return sortedNums.get(0);  // 返回最大的分数
       }
}

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);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值