【发布时间】:2016-12-31 15:50:58
【问题描述】:
我的目标是输入一个键和一个数组,然后使用二进制搜索输出该数组中小于或等于该键的值的数量。
这是我的代码:
import java.util.*;
import java.io.*;
public class search {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int key = scan.nextInt();
int size = scan.nextInt();
int [] array = new int [size];
for (int i = 0;i < size ;i++ ) {
array[i] = scan.nextInt();
}
Arrays.sort(array);
System.out.println(binary(key, array));
}
public static int binary (int key, int [] array){
int lo = 0;
int hi = array.length - 1;
while (lo < hi){
int mid = (lo + hi) / 2;
if (array[mid] <= key){
lo = mid;
}
else {
hi = mid - 1;
}
}
return lo + 1;
}
}
数据键 = 5,数组 = {2,4,6,7},程序运行良好。但是一旦有 三个 值小于或等于键,它就会变得混乱。例如,key = 5, array = {2,4,5,6} 会产生一个无限循环。我已经找到了原因,但我不知道如何解决它。
基本上mid 值一直被计算为相同的值。我能做些什么来解决这个问题?如果代码本身就是错误的,那么这意味着the set solution for a USACO problem 是错误的。
【问题讨论】:
-
用你的测试用例创建一个主目录。不要让我们这样做。
标签: java arrays algorithm infinite-loop binary-search