Dies ist ein Interview Frage, die ich beantworten musste. Nun, eigentlich Freunde, aber er hat mich gefragt, und ich wusste auch nicht die Antwort. Daher frage ich hier:die kleinste und die zweiten kleinste Zahl in einer Anordnung von acht Zahlen mit nur 9 Vergleichen
Angesichts einer Reihe von 8 ganzen Zahlen, finden Sie die kleinste und die zweitkleinste ganze Zahl mit nur 9 Vergleiche. Genauer gesagt in n+log(n)-2
Zeit.
Ich bin sicher, beachten Sie, wie Sie es nur 9 Vergleiche mit tun können. So nah bin ich dran. (10 Vergleiche)
public class Comp {
static int[] nums = new int[]{9, 4, 5, 3, 2, 7, 6, 1};
static int compcount = 0;
//int[] is nums[] array
public static int[] twoLeast(int[] a){
int min1 = a[0]; //Prospective lowest number
int min2 = a[1]; //Prospective second lowest number
if(isLessThan(min2, min1)){
min1 = a[1];
min2 = a[0];
}
for(int i=2; i<a.length;i++){
if(isLessThan(a[i], min1)){
min2 = min1;
min1 = a[i];
}else if(isLessThan(a[i], min2)){
min2 = a[i];
}
}
return new int[]{min1, min2};
}
public static boolean isLessThan(int num1, int num2){
compcount++;
return num1 < num2;
}
}
Hier habe ich eine Funktion isLessThan()
Überblick über die Anzahl der Vergleiche zu halten. Auch dies macht 10 Vergleiche. Wie ist es möglich, dies in 9 Vergleichen zu tun? Oder in n+log(n)-2
Zeit?
PS: Ich habe es in Java implementiert, aber es kann als Hinweis jede Sprache
Hi, ich mag deine Analogie, aber die Zahlen verwirren mich irgendwie im zweiten Teil 'Dann wird der zweitbeste a4, a12 oder a5678 sein. Wie hast du' a4, a12, a5678' bekommen? viel – Krimson
Es ist einfacher, als binärer Baum zu visualisieren. Die Zahlen sind in den geordneten Paaren mit einer Zahl, die (3) als der Gegner hat. Wenn (3) der beste ist, sind die gespielten Spiele (a3, a4), (a12, a34) und (a1234, a5678). Daher sind die Gegner a4, a12 und a5678. – user1952500