Mein Ziel ist es, einen Schlüssel und ein Array einzugeben und dann die Anzahl der Werte in diesem Array, die kleiner oder gleich dem Schlüssel sind, mithilfe der binären Suche auszugeben.Unendliche Schleife in der binären Suchvariante (Java)
Dies ist mein Code:
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;
}
}
Mit dem Datenschlüssel = 5, array = {2,4,6,7}, das Programm funktioniert. Aber sobald drei Werte sind, die kleiner oder gleich dem Schlüssel sind, geht es drunter und drüber. Zum Beispiel erzeugt key = 5, array = {2,4,5,6} eine Endlosschleife. Ich habe den Grund dafür gefunden, aber ich verstehe nicht, wie ich das umgehen soll.
Grundsätzlich wird der mid
Wert immer als derselbe Wert berechnet. Was kann ich tun, um dies zu umgehen? Wenn der Code von Natur aus falsch ist, bedeutet das, dass the set solution for a USACO problem falsch war.
Erstellen Sie ein Haupt mit Ihren Testfällen. Lass uns das nicht machen. – nicomp