-
算法题 - 最低分数线问题
正文
最低分数线问题
记录面试算法题,便于回顾
问题描述
题目:
某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2….a_n,小美作为比赛的裁判希望设定一个分数线m,使得所有分数大于m的选手晋级,其他人淘汰。
但是为了保护粉丝脆弱的心脏,小美希望晋级和淘汰的人数均在[x,y]之间。
显然这个m有可能是不存在的,也有可能存在多个m,如果不存在,请你输出-1,如果存在多个,请你输出符合条件的最低的分数线。
输入:
n x y
n个选手的得分
输出:
m (最低分数)
例如:
输入:
6 2 3
1 2 3 4 5 6
输出:
3
思路
思路一:
设 晋级的人数是 t, 则 t ∈ [x, y]
并且 淘汰人数 n-t,则 n-t ∈ [x, y] , 否则不存在,输出 -1
求 m的最小值,就相当于是 晋级的人 越多,淘汰的人越少,分数线就越低
思路二:
设 晋级的人数是 t, 则 t ∈ [x, y]
并且 淘汰人数 n-t,则 n-t ∈ [x, y] , 否则不存在,输出 -1
可以设定值 t 在 [x,y]之间依次循环,然后做判断,最后留下来的数组中最小数
解题
方式一:
/**
* @description
* 求最小分数
* @author TianwYam
* @date 2021年5月25日下午7:39:59
* @param n 总人数
* @param x 最小范围值
* @param y 最大范围值
* @param a 各个人数的成绩
* @return
*/
public static int lowestScore(int n, int x, int y, int[] a) {
// 从低到高 排序
// 淘汰人最低分数就是淘汰人数对应的分数
Arrays.sort(a);
// 思路一:
// 设 晋级的人数是 t, 则 t ∈ [x, y]
// 并且 淘汰人数 n-t,则 n-t ∈ [x, y] , 否则不存在,输出 -1
// 求 m的最小值,就相当于是 晋级的人 更多,淘汰的人更少
// 取极限值,这样淘汰的人就更少,m就是最低的
// 淘汰的人
int t = n - y ;
// t ∈ [x, y]
if (t > y) {
// 不存在
return -1 ;
} else {
if (t >= x) {
// 需要淘汰的人的个数,最小就是对应的分数
return a[t -1];
}else {
// 必须淘汰的人是 在 x, y 直接,所以取最小的
return a[x - 1 ] ;
}
}
}
方式二:
/**
* @description
* 求最小分数
* @author TianwYam
* @date 2021年5月25日下午7:39:59
* @param n 总人数
* @param x 最小范围值
* @param y 最大范围值
* @param a 各个人数的成绩
* @return
*/
public static int lowestScore2(int n, int x, int y, int[] a) {
// 从低到高 排序
// 淘汰人最低分数就是淘汰人数对应的分数
Arrays.sort(a);
// 思路二:
// 设 晋级的人数是 t, 则 t ∈ [x, y]
// 并且 淘汰人数 n-t,则 n-t ∈ [x, y] , 否则不存在,输出 -1
// 可以设定值 t 在 [x,y]之间依次循环,然后做判断,最后留下了的数组中最小数
List<Integer> existNum = new ArrayList<>();
// t ∈ [x, y]
for (int t = x; t <= y; t++) {
// n-t ∈ [x, y]
if (x <= n-t && n-t <= y) {
existNum.add(t);
}
}
if (existNum.size() == 0) {
return -1 ;
}
// // 最小淘汰的人数
// Integer min = Collections.min(existNum);
// return a[min-1] ;
// 最大晋级的人数
Integer max = Collections.max(existNum);
// 最小淘汰人
return a[n-max-1] ;
}
欢迎关注,谢谢!
来源:https://www.cnblogs.com/tianwyam/p/lowestScore.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
JavaScript判断两个数组相等的四类方法
js如何操作video标签
React实战--利用甘特图和看板,强化Paas平
【记录】正则替换的偏方
前端下载 Blob 类型整理
抽象语法树AST必知必会
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程