Finden Sie die N-te häufigste Zahl im array

Find the nth most frequent number in array.
(There is no limit on the range of the numbers)

Ich denke, wir können

(i) speichern Sie das auftreten von jedem element über die maps in C++

(ii) erstellen eines Max-Heaps in linearer Zeit der Ereignisse(oder Frequenz) des Elementes und extrahieren Sie dann bis zu dem N-TEN element,
Jeder Extraktion log(n) Zeit zu heapify.

(iii) erhalten wir die Frequenz des N-TEN häufigste Anzahl

(iv), dann können wir lineare Suche durch den hash zu finden, das element mit dieser Frequenz.

Zeit O(NlogN)
Space - O(N)

Gibt es eine bessere Methode ?

  • Siehe "Auswahl" - Algorithmus, die es erlaubt, zu wählen Sie das N-te element aus und sortierten array in O(N).
  • Die Frage ist, wählen Sie n-TEN die meisten FREQUENZ-Zahl und nicht N-te element.
  • ja, Schritt ich immer noch erforderlich, aber dann die Schritte ii, iii und iv ersetzt werden kann durch die Auswahl-Algorithmus ist O(N), die sich in einer Lösung, die O(N) weltweit.
InformationsquelleAutor Luv | 2012-06-10
Schreibe einen Kommentar