算法题 - 最低分数线问题

最低分数线问题


记录面试算法题,便于回顾


问题描述


题目:

​ 某比赛已经进入了淘汰赛阶段,已知共有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[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天涯共明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值