Fonte: Intervista Microsoft DomandaTrova l'elemento non duplicati in un array ordinato
Dato un array ordinato, in cui ogni elemento è presente due volte, tranne uno che è presente getta, abbiamo bisogno di trovare quell'elemento .
Ora un O standard (n) la soluzione è di fare un XOR di lista, che restituirà l'elemento non duplicati (dal momento che tutti gli elementi duplicati si annullano.)
E 'possibile risolvere il più rapidamente se sappiamo l'array è ordinato?
Fare una "ricerca" binaria (piuttosto trasversale) sulla matrice, controllare entrambi i vicini, se bot sono diversi dal valore medio, si ha la soluzione. Questo è 'O (log n)'. –
@ H2CO3 in che modo? I vicini non sarebbero sempre diversi? –
@ZiyaoWei Nopeeeee! Io non parlo inglese. Se l'array è ordinato, ('1 1 2 2 3 4 4'), quindi un vicino è uguale al valore centrale. –