Find the nth most frequent number in array.
(There is no limit on the range of the numbers)
Penso che possiamoTrovare il numero N-esimo più frequente nella matrice
(i) memorizzare il verificarsi di ogni elemento utilizzando le mappe in C++
(ii) costruire un Max-heap nel tempo lineare delle occorrenze (o frequenza) dell'elemento e quindi estrae fino all'elemento N-esimo, Ogni estrazione richiede log (n) il tempo di heapify.
(iii) avremo la frequenza del N-esimo numero più frequente
(iv) allora possiamo lineare ricerca tra l'hash per trovare l'elemento avente questa frequenza.
Tempo - O (N log N) Space - O (N)
Esiste un metodo migliore?
Sede [Algoritmo Selezione] (http://en.wikipedia.org/wiki/ Selection_algorithm) che consente di selezionare l'elemento Nth dall'array non ordinato in O (N). – salva
@salva - La domanda è selezionare l'n-esimo numero di FREQUENZA e non l'ennesimo elemento. – user754657
@ user754657: sì, il passaggio * i * è ancora richiesto, ma i passaggi * ii *, * iii * e * iv * possono essere sostituiti dall'algoritmo di selezione che è O (N), risultante in una soluzione che è O (N) a livello globale. – salva