Questa domanda mi è stata posta nell'intervista di Google. Potrei farlo O (n * n) ... Posso farlo in tempo migliore. Una stringa può essere costituito solo da 1 e 0.Intervista Google: trova la distanza pazzesca tra le stringhe
Definizione:
X & Y sono stringhe formato da 0 o 1
D(X,Y)
= Rimuovere le cose comuni all'inizio sia X & Y Quindi aggiungere le lunghezze rimanenti da entrambe le corde.
Ad es.
D(1111, 1000)
= Solo il primo alfabeto è comune. Quindi la stringa rimanente è 111
& 000
. Quindi il risultato length("111")
& length("000")
= 3 + 3 = 6
D(101, 1100)
Solo = primi due alfabeti sono comuni. Quindi la stringa rimanente è 01
& 100
. Quindi il risultato è length("01")
length("100")
= 2 + 3 = 5
È abbastanza ovvio che scoprire una distanza così folle sarà lineare. O (m).
Ora la domanda è
data di ingresso n, dicono come
1111
1000
101
1100
Ottieni la massima distanza possibile pazza.
n è il numero di stringhe di input. m è la lunghezza massima di qualsiasi stringa di input.
La soluzione di O (n * m) è piuttosto semplice. Può essere fatto in un modo migliore? Supponiamo che m sia corretto. Possiamo farlo in meglio di O (n^2)?
Stavo pensando che posso ordinarli tutti. Ma anche allora non sono in grado di procedere da nessuna parte. Qualcuno può guidarmi con l'approccio a questo problema. – yuvi
@Dukeling: Grazie per la modifica. È possibile che tu mi aiuti con l'approccio. – yuvi
Anche l'ordinamento farà parte dell'algoritmo. Se l'elenco è ordinato, basta controllare gli elementi consecutivi per una distanza pazza e quindi il massimo. Tuttavia, non penso che lo smistamento sia l'unico modo. – SparKot