Ich versuche, eine wirklich interessante Programmieraufgabe zu lösen, und ich bin irgendwie außerhalb der Ideen, warum mein Code fehlschlägt. Hier ist sie:Suche nach einem Fall, wenn die binäre Suche fehlschlägt
Write eine Funktion, die, da eine Liste und eine Zielsumme, kehrt Null basierenden Indizes von irgendwelchen zwei verschiedenen Elementen, deren Summe gleich die Zielsumme. Wenn solche Elemente nicht vorhanden sind, sollte die Funktion null zurückgeben. Zum Beispiel findTwoSum (new int [] {1, 3, 5, 7, 9}, 12), wenn eine der folgenden Tupel von Indizes zurück:
1, 4 (3 + 9 = 12) 2, 3 (5 + 7 = 12) 3, 2 (7 + 5 = 12) 4, 1 (9 + 3 = 12)
sollten einfach sein oder? Also hier ist meine Funktion:
public static int[] findTwoSum(int[] list, int sum) {
int[] indices = null;
for(int i = 0; i < list.length; i++) {
int currentNum = list[i];
int findNum = sum - currentNum;
int length = list.length;
int min = i;
int max = length-1;
while(max >= min) {
int guess = (max+min)/2;
if(list[guess] == findNum) {
return new int[] {i,guess};
}
if(list[guess] < findNum) {
min = guess + 1;
}
if(list[guess] > findNum) {
max = guess - 1;
}
}
}
return indices;
}
-Code ist ziemlich einfach, für jedes Element im Array, versucht es mit binärer Suche, ein weiteres Elemente zu finden, so dass ihre Summe der bereitgestellten sum
gleich ist. Ich habe diesen Code getestet und konnte kein Szenario finden, in dem es fehlschlägt, vorausgesetzt, das angegebene Array ist sortiert. Allerdings, wenn ich diesen Code auf TestDome ausführen, schlägt der letzte Fall fehl, es ist irgendwie falsche Lösung. Kann jemand darauf hinweisen, was mit diesem Ansatz nicht stimmt?
Die Frage stellt zwei _distinct_ Elemente einer Liste, die Ihr Code scheint nicht zu handhaben richtig. – Gassa
@Gassa Ja, ich hatte auch einen Haken dafür, es hat mir wirklich nicht geholfen. Was ich jetzt denke ist, dass das Array im letzten Fall nicht sortiert werden könnte. – Zed
Ist die angegebene Liste bereits sortiert? –