Mi è stata posta questa domanda nell'intervista di recente.Ordina array intero in tempo strettamente O (n)
Dato un array intero ordinato contenente numeri negativi e positivi, come ricorrere all'array in base ai valori assoluti degli elementi?
Questo deve essere eseguito rigorosamente nel tempo O (n).
ingresso
{-9, -7, -3,1,6,8,14}
uscita
{1, -3,6, -7,8, -9,14}
Quali sono le possibili soluzioni oltre al tempo O (n)?
Trova il punto centrale (come nel più vicino a zero) e unire la matrice da lì in ambedue le direzioni si riduce di fondere due sottoarray ordinate che è garantito O (n). –
@ThomasJungblut puoi spiegarci meglio. –
@mmhasann È semplice, si prende il centro dell'array (nel nostro caso 1), che deve essere il primo numero nel nuovo array (perché nell'ingresso è garantito un array ordinato). Quindi, unisci le due metà (superiore e inferiore): medio = 1 -> primo del primo tempo = -3 -> primo della seconda metà = 6 -> secondo del primo tempo = -7 -> secondo della seconda metà = 8, ... Hai: 1, -3, 6, -7, 8, -9, 14 –