2021-06-01

算法题

最低分数线问题


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


问题描述

题目:

​ 某比赛已经进入了淘汰赛阶段,已知共有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] ;	}



欢迎关注,谢谢!


刚开始写微信公众号,请多多关注,欢迎,多谢!

微信公众号:《Java学习积累》
请关注一下,多谢!!!
微信公众号:Java学习积累

本文由博客一文多发平台 OpenWrite 发布!









原文转载:http://www.shaoqun.com/a/776035.html

跨境电商:https://www.ikjzd.com/

刘小东:https://www.ikjzd.com/w/1853

mile:https://www.ikjzd.com/w/1746


最低分数线问题记录面试算法题,便于回顾问题描述题目:​ 某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2….a_n,小美作为比赛的裁判希望设定一个分数线m,使得所有分数大于m的选手晋级,其他人淘汰。​ 但是为了保护粉丝脆弱的心脏,小美希望晋级和淘汰的人数均在[x,y]之间。​ 显然这个m有可能是不存在的,也有可能存在多个m,如果不存在,请你输出-1,如果
e淘网:https://www.ikjzd.com/w/1698
cima:https://www.ikjzd.com/w/1372
小三短信提醒我老公多带几个套:http://lady.shaoqun.com/a/272984.html
妈妈怂恿我接拍激情戏替身:http://lady.shaoqun.com/a/272159.html
亚马逊美国站对家用婴儿换洗台安全规范:ASTM F2388-18:https://www.ikjzd.com/articles/145262
"血雨腥风"的价格战,看大卖如何应对的?:https://www.ikjzd.com/articles/145261
沃尔码:https://www.ikjzd.com/w/220
口述我和少妇爱爱_口述我和闺蜜互慰过程:http://www.30bags.com/m/a/254341.html
沃尔玛将会给批准的卖家提供免费2天送货徽章:https://www.ikjzd.com/articles/145268

No comments:

Post a Comment