Sono stato incaricato con la creazione di un metodo che stampare tutti gli indici in cui il valore x viene trovato in un array ordinato.Utilizzando binario Cerca con array ordinato con i duplicati
I capire che se solo digitalizzato attraverso la matrice da 0 a N (lunghezza di array) avrebbe una durata di O (n) caso peggiore. Dato che la matrice che verrà passata nel metodo verrà ordinata, suppongo che io possa sfruttare l'utilizzo di una ricerca binaria poiché questa sarà O (log n). Tuttavia, questo funziona solo se l'array ha valori univoci. Poiché la ricerca binaria termina dopo il primo "ritrovamento" di un determinato valore. Stavo pensando di fare una ricerca binaria per trovare x nell'array ordinato e quindi controllare tutti i valori prima e dopo questo indice, ma se l'array conteneva tutti i valori x, non sembra che sarebbe molto meglio.
Credo che quello che sto chiedendo è: esiste un modo migliore per trovare tutti gli indici per un particolare valore in un array ordinato che è meglio di O (n)?
public void PrintIndicesForValue42(int[] sortedArrayOfInts)
{
// search through the sortedArrayOfInts
// print all indices where we find the number 42.
}
Es: SortedArray = {1, 13, 42, 42, 42, 77, 78} stamperebbe: "42 è stato trovato a Indici: 2, 3, 4"
Um, {42, 13, 42, 12, 1, 0, 42} è * non * ordinato. –
la tua soluzione suona bene, se la matrice contenesse tutti i valori x dovresti guardarli tutti in ogni caso, non importa quale sia – jlordo
@JonSkeet - Scusa per quel refuso. Ho aggiornato la matrice a una ordinata. – 5StringRyan