最低分数线问题
记录面试算法题,便于回顾
问题描述
题目:
某比赛已经进入了淘汰赛阶段,已知共有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[