青训营 X 豆包MarsCode 技术训练营--优秀项目组初选评比

题目

公司正在进行优秀项目组评比的初选工作,参赛者有小C、小U、小R、小S、小M和小F的项目组。评委会已经根据他们提交的材料完成了打分,各个项目组的得分分别是s1,s2,s3,...,sks1​,s2​,s3​,...,sk​。评委们希望设定一个初选晋级的分数线xx,让所有得分大于xx的项目组晋级,其他的项目组将被淘汰。此外,评委们希望晋级的项目组数量和淘汰的项目组数量都在区间[m,n][m,n]之间。

显然,这个分数线xx可能不存在,也可能存在多个满足条件的分数线。如果不存在满足条件的xx,则输出−1−1;如果存在多个满足条件的分数线xx,则输出满足条件的最小分数线。

测试样例

示例 1:

复制代码
输入:m = 2, n = 3, a = [1, 2, 3, 5, 6, 4]
输出:3

示例 2:

复制代码
输入:m = 1, n = 2, a = [7, 8, 9, 3, 5]
输出:-1

示例 3:

复制代码
输入:m = 1, n = 4, a = [7, 8, 9, 3, 5]
输出:3

思路

复制代码
排序:
    对得分数组 a 进行升序排序,以便于后续处理。

遍历可能的分数线:
    从数组的第一个元素到倒数第二个元素(即 a[0] 到 a[len-2]),逐个作为分数线 x 进行检查。
    选择 a[len-2] 而不是 a[len-1] 是因为最后一个元素不可能作为分数线,因为它没有更大的分数来形成晋级的项目组。

计算晋级和淘汰数量:
    对于每个分数线 x,计算大于 x 的项目组数量(晋级数量)和小于等于 x 的项目组数量(淘汰数量)。
    晋级数量可以通过数组长度减去当前索引加一得到。
    淘汰数量可以通过当前索引加一得到。

检查条件:
    检查晋级和淘汰的数量是否都在 [m, n] 之间。
    如果是,则记录当前分数线 x 并返回。

返回结果:
    如果遍历完所有可能的分数线后都没有找到满足条件的分数线,则返回 -1。

代码

import java.util.Arrays;

public class Main {

public static int solution(int m, int n, int[] a) {

// 对得分数组进行排序

Arrays.sort(a);

复制代码
    int len = a.length;
    
    // 遍历所有可能的分数线
    for (int i = 0; i < len - 1; i++) {
        int passCount = len - (i + 1);  // 晋级数量
        int failCount = i + 1;  // 淘汰数量
        
        // 检查晋级和淘汰的数量是否在 [m, n] 之间
        if (passCount >= m && passCount <= n && failCount >= m && failCount <= n) {
            return a[i];  // 返回当前分数线
        }
    }
    
    // 如果没有找到满足条件的分数线,返回 -1
    return -1;
}

public static void main(String[] args) {
    System.out.println(solution(2, 3, new int[]{1, 2, 3, 5, 6, 4}) == 3);
    System.out.println(solution(1, 2, new int[]{7, 8, 9, 3, 5}) == -1);
    System.out.println(solution(1, 4, new int[]{7, 8, 9, 3, 5}) == 3);
    System.out.println(solution(17, 79, new int[]{725,835,16,137,539,407,912,766,279,368,454,216,957,680,984,369,873,776,902,337,751,432,102,727,93,848,941,427,321,706,466,907,509,629,296,418,457,768,445,104,864,625,289,659,441,65,585,518,225,441,287,928,720,232,561,936,393,523,270,901,738,45,40,507,447,929,100,612,559,408,860,36,387,606,318,677,828,419,246,33,437,508,203,901,363,442,609,840,877,269,815,197,38,179,896,896,331,697,334,309,560,669,1,504,309,627,37,10,475,193,567,910,496,965,615,868,368,650,361,107}) == 368);
}

}

相关推荐
新知图书5 小时前
RDD的特点、算子与创建方法
数据分析·spark·1024程序员节
AORO202512 小时前
智能三防手机哪款好?22000mAh+夜视+露营灯打造专业户外装备
服务器·网络·智能手机·电脑·1024程序员节
java_logo16 小时前
SGLANG Docker容器化部署指南
linux·运维·docker·容器·eureka·1024程序员节
开利网络16 小时前
合规底线:健康产品营销的红线与避坑指南
大数据·前端·人工智能·云计算·1024程序员节
独行soc17 小时前
2025年渗透测试面试题总结-234(题目+回答)
网络·python·安全·web安全·渗透测试·1024程序员节·安全狮
金融小师妹19 小时前
多因子量化模型预警:美元强势因子压制金价失守4000关口,ADP数据能否重构黄金趋势?
人工智能·深度学习·1024程序员节
unable code20 小时前
攻防世界-Misc-SimpleRAR
网络安全·ctf·misc·1024程序员节
少林码僧21 小时前
2.3 Transformer 变体与扩展:BERT、GPT 与多模态模型
人工智能·gpt·ai·大模型·bert·transformer·1024程序员节
liu****1 天前
11.Linux进程信号(三)
linux·运维·服务器·数据结构·1024程序员节
阿部多瑞 ABU1 天前
Unicode全字符集加解密工具 - 命令行交互版:功能完整的终端解决方案
经验分享·交互·ai编程·1024程序员节