Mon but est d'entrer une clé et un tableau, puis de sortir le nombre de valeurs dans ce tableau qui sont inférieures ou égales à la clé, en utilisant la recherche binaire.Boucle infinie dans une variante de recherche binaire (Java)
Ceci est mon 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;
}
}
Avec la clé de données = 5, array = {2,4,6,7}, le programme fonctionne très bien. Mais le moment où il y a trois valeurs qui sont inférieures ou égales à la clé, ça va haywire. Par exemple, key = 5, array = {2,4,5,6} produit une boucle infinie. J'ai trouvé la raison de cela mais je ne vois pas comment la contourner.
Fondamentalement, la valeur mid
continue d'être calculée avec la même valeur. Que puis-je faire pour contourner cela? Si le code est intrinsèquement erroné, cela signifie que le the set solution for a USACO problem était erroné.
Créez une main avec vos cas de test. Ne nous force pas à le faire. – nicomp