我的目標是輸入一個鍵和一個數組,然後使用二分查找輸出該數組中小於或等於該鍵的值的數目。二進制搜索變量(Java)中的無限循環
這是我的代碼:
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是錯誤的。
創建一個主與你的測試用例。不要讓我們這樣做。 – nicomp