Das Folgende sind einige Methoden, um Ihnen die Anzahl der Java -Array -Nummern vorzustellen. Der spezifische Inhalt ist wie folgt:
Methode 1:
Array -Sortierung und dann der Zwischenwert ist definitiv der Wert, der gefunden wird. Sortieren Sie die minimale Zeitkomplexität (schnelle Sortierung) O (NLOGN) sowie die Durchquerung.
Methode 2:
Unter Verwendung einer Hash -Tabellenmethode, dh, zählt die Anzahl der Vorkommen jedes Arrays und die Ausgabe von Zahlen, deren Vorkommen größer als die Länge des Arrays ist.
Methode 3:
Die Anzahl der Vorkommen übersteigt die Hälfte der Länge des Arrays, was darauf hinweist, dass diese Zahl mehrmals als die Summe anderer Zahlen erscheint.
Erwägen Sie jedes Mal zwei verschiedene Zahlen, wobei die Anzahl der Vorkommen in den verbleibenden Zahlen immer noch die Gesamtzahl überschreitet. Wiederholen Sie den Vorgang ständig, schließen Sie andere Zahlen aus und finden Sie schließlich die Zahl mit mehr als der Hälfte der Vorkommen. Die zeitliche Komplexität dieser Methode ist O (n) und die Raumkomplexität ist O (1).
Um die Idee zu ändern, kann dies eher durch Zählen als durch eine echte physische Löschung erreicht werden. Während des Überfahrens des Arrays speichern Sie zwei Werte, eine ist die Zahl im Array und die andere ist die Anzahl der Vorkommen. Wenn diese Zahl mit der zuvor gespeicherten Zahl übereinstimmt, wird die Anzahl der Male um 1 erhöht, und wenn sie unterschiedlich ist, wird die Anzahl der Zeiten um 1 verringert. Wenn die Anzahl der Male 0 ist, speichern Sie die nächste Zahl und setzen Sie die Nummer auf 1. Die Nummer. Da die Nummer, nach der wir suchen, werden die Nummer.
public int morehalf (int [] nums) {int result = 0; int count = 1; if (numsgth == 0) return -1; result = nums [0]; für (int i = 1; i <nums.länge; i ++) {if (count == 0) {result = nums [i]; Ergebnis;}Methode 4:
Eine verbesserte Schnellreihesortierung, die zuvor erwähnt wurde, muss die Nummer in der mittleren Position der gewünschte Wert sein, wenn ein Array sortiert ist. Die zeitliche Komplexität der Sortierung von Arrays ist O (Nlog (n)), aber für diese Frage gibt es bessere Algorithmen, die innerhalb der Zeitkomplexität O (n) gefunden werden können.
Die Partition () -Methode ist die wichtigste Methode. Diese Methode gibt einen Index zurück, der sicherstellen kann, dass die Nummer an der Indexposition sortiert ist. Die Zahl links vom Index ist kleiner als die Zahl, in der sich der Index befindet, und die Nummer rechts neben dem Index ist größer als die Zahl, in der sich der Index befindet. Dann kann diese Frage mit dieser Idee gelöst werden.
Rückgabeindex über Partition (). Wenn Index == MID, bedeutet dies, dass der Median des Arrays gefunden wurde; Wenn indexMid, bedeutet dies, dass der Median zwischen [Start, Index-1] liegt. Ich weiß, dass das Ende des Index == MID -Schleife erhalten wird.
public int partition (int [] nums, int start, int End) {int pivotkey = nums [start]; int Origin = start; while (start <end) {while (start <end && nums [end]> = pivotkey) End-; Swap (nums, start, enden); Swap (nums, Origin, End); Rücksende;} p int [] swap (int [] ints, int x, int y) {int temp = ints [x]; ints [x] = ints [y]; ints [y] = temp; ints zurückgeben; } public int morethanHalf (int [] nums) {if (numsgth == 0) return -1; int start = 0; int end = numsgth-1; int index = partition (nums, start, ende); int Mid = nums.länge/2; wobei (index! Mid) {if (Index> Mid) //. Partition (nums, start, index-1); else {// ansonsten den Array-Index von Index+1 an das Ende abschnitt = partition (nums, Index+1, Ende);}} Return NUMs [Index];};};Der obige Inhalt führt den relevanten Inhalt des Java -Codes ein, der Zahlen implementiert, die mehr als die Hälfte der Zeit in einem Array angezeigt werden. Ich hoffe, es wird für alle hilfreich sein!