[英]How to find the rank 2 student with binary search at java?
在有 400 名学生参加的考试中,老师想给排名第 2 的学生一份特别的礼物。如果所有参与者都通过测试编号 (1-400) 进行识别,请创建最有效的算法和程序来寻找学生谁会得到奖励!
*) 相同的值具有相同的等级(例如 100 100 98 98 那么第一等级有 2 个人,第二等级有 2 个人)
注意:帮帮我,java中的代码如何,我真的很困惑:(
您不需要对输入进行排序,只需:
遍历项目并:
例如,假设项目是 Joe:1 Jack:2 Jill:3, Jim: 1, Job: 2 然后:
Joe 排名高于 null => 当前最高排名为 1,项目为 [Joe]
Jack 排名高于当前 top (1) => 将 top rank 设置为 2 并且将 items 设置为 [Jack],并将第二个 top 设置为上一个 top,即 1 和 [Joe]
Jill 排名高于当前 top (2) => 将 top rank 设置为 3,项目为 [Jill],并将第二个 top 设置为上一个 top,即 2 和 [Jack]
Jim 的排名低于当前的顶级 (3) 并且低于第二名 (2) => 无事可做
工作排名低于当前的顶部 (3) 但等于第二个顶部 (2) => 将工作附加到第二个顶部列表,所以它是 [Jack and Job]
结果是 top: 3 和 [Jill] 和第二个 top: 2 和 [Jack and Job]。
如果输入已排序,您可以使用二分搜索,但排序比仅执行上述操作更昂贵 (n log n)。
你必须有两个数组:一个是学生的识别号码,另一个是他们的分数让我们命名:“a”分数数组和“b”识别数字数组
这将使您对数组进行排序:
public static void bubbleSort(int[] a,int[]b) {
boolean sorted = false;
int temp;
while(!sorted) {
sorted = true;
for (int i = 0; i < a.length - 1; i++) {
if (a[i] > a[i+1]) {
temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
temp = b[i];
b[i] = b[i+1];
b[i+1] = temp;
sorted = false;
}
}
}
}
在你做空他们之后,用这个找到第二大的数字
static int second(int []a){
int number =a[0];//case all of them had same score
for(int i=0;i<a.length-1;i++){
if (a[i]>a[i+1]){
number= a[i+1];
break;
}
}
return number;
}
现在的结果存储在一个变量number
和:
for(int i=0;i<a.length;i++){
if (a[i]==number){
System.out.println(b[i]);
}
}
当然还有更多的解决方案,但这是我的...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.