C'è un modo per trovare tutti gli elementi duplicati in un array di elementi N in tempo O (N)?Trova i duplicati in un array in tempo O (N)
Esempio:
ingresso: 11, 29, 81, 14, 43, 43, 81, 29
uscita: 29, 81, 43
ordinamento dell'input e facendo una scansione lineare per rilevare i duplicati distrugge l'ordine e dà l'output: 29,43,81.
Ordinando-by-chiave altro array di indici {0,1,...N-1}
secondo l'array dato per ottenere {1,4,2}
e quindi classificare l'insieme risultante di indici per ottenere {1,2,4}
ci darà {29,81,43}
, ma questo richiede O(N logN)
tempo.
Esiste un algoritmo O (N) per risolvere questo problema?
P.S. Ho dimenticato di aggiungere: non voglio usare tabelle hash. Sto cercando una soluzione non hash.
Se lo spazio non è una limitazione, memorizzare ogni elemento in un hash. Quando si verifica una collisione – Anurag
@Anurag: Questo è il caso migliore/tempo medio di esecuzione O (n) ma il caso peggiore O (n2). –
@Anurag: Che cosa vuoi dire esattamente con un hash? –