Descrizionetrovare l'elemento verificano volte b in una matrice di dimensione n * k + b
Dato un array di dimensioni (n*k+b)
dove n elementi avvengono k volte e un elemento di verifica volte b, in altre parole non sono n+1
Elementi distinti. Dato che 0 < b < k
trova l'elemento che si verifica b volte.
mie soluzioni tentate
soluzione ovvia useranno l'hashing, ma non funzionerà se i numeri sono molto grandi. La complessità è
O(n)
usando la mappa per memorizzare le frequenze di ogni elemento e poi attraversare mappa per trovare l'elemento che si verificano b times.As Map sono implementate come altezza equilibrato alberi Complessità sarà
O(nlogn)
.
Entrambi mia soluzione sono stati accettati, ma l'intervistatore ha voluto una soluzione lineare senza l'utilizzo di hashing e suggerimento ha dato era rendere l'altezza costante albero in albero in cui si archiviano le frequenze, ma io non sono in grado di capire ancora la soluzione corretta.
Voglio sapere come risolvere questo problema in tempo lineare senza hashing?
EDIT:
Esempio:
ingresso: n=2 b=2 k=3
Aarray: 2 2 2 3 3 3 1 1
uscita: 1
cosa succede se b == k? –
Nota che la tua soluzione è 'O ((n * k + b) logn)', e non 'O (nlogn)' - dati i termini della domanda. – amit
È possibile fornire un campione di array contenente i valori campione? –