Ich habe ein Array und mein Ziel ist herauszufinden, wie viele um ein Vielfaches von 11 sind. Das Array ist nicht sortiert.Wie überprüft man die maximale Anzahl von Elementen, die gleichmäßig verteilt sind?
Such as [27, 16, 52, 84], this would return 2
[1, 55, 66, 33] should return 3.
[99, 8, 52, 32] should return 0
Zeit, was ich habe, ist im Grunde in dem Array für-jedes Element zu durchlaufen, überprüfen jedes andere Element mit mit 11 multipliziert Aber das lässt mich an einem O (n²) Laufzeit, trotzdem kann ich das optimieren ?
static int eval(int [] a) {
int i, j, k, counter = 0;
for (i = 0; i < a.length; i++) {
for (j = 0; j < a.length; j++) {
if (i != j) {
for (k = -9; k < 10; k++) {
if (a[i] == a[j] + k*11) {
counter++;
break;
}
}
}
}
}
//if found nothing, will return 0, if found 1 matching,
//it should be 2 numbers that share this 11-difference.
return counter : counter == 0? 0: counter + 1;
}
Vielen Dank!
Yup. Sie müssen jedes Paar nacheinander überprüfen. Kann nicht weniger als 2 Loops gehen. –
Aber immer noch - dein erstes Beispiel hat nur 16 und 27. Was ist das andere Paar? –
yeah ich denke, ich sollte es als "wie viele Zahlen teilen Unterschied von 11". 16 und 27 sind 2 Zahlen, also 2 – bZhang