Ho intervistato alcuni giorni fa Amazon. Non ho potuto rispondere a una delle domande che mi hanno chiesto per la loro soddisfazione. Ho cercato di ottenere la risposta dopo l'intervista ma finora non ho avuto successo. Ecco la domanda:Valore minimo dei valori massimi nei sottosegmenti ... in O (n) complessità
Si dispone di un array di numeri interi di dimensione n. Viene fornito il parametro k
dove k < n
. Per ogni segmento di elementi consecutivi di dimensioni k
nella matrice è necessario calcolare il valore massimo. Hai solo bisogno di restituire il valore minimo di questi valori massimi.
Ad esempio con 1 2 3 1 1 2 1 1 1
e k = 3
la risposta è 1
.
I segmenti sarebbero 1 2 3
, 2 3 1
, 3 1 1
, 1 1 2
, 1 2 1
, 2 1 1
, 1 1 1
.
I valori massimi di ciascun segmento sono 3
, 3
, 3
, 2
, 2
, 2
, 1
.
Il minimo di questi valori è 1
quindi la risposta è 1
.
La risposta migliore che ho trovato è di complessità O (n log k). Quello che faccio è creare un albero di ricerca binario con i primi elementi k
, ottenere il valore massimo nell'albero e salvarlo nella variabile minOfMax
, quindi eseguire il ciclo di un elemento alla volta con gli elementi rimanenti nell'array, rimuovere il primo elemento in il segmento precedente dall'albero di ricerca binario, inserire l'ultimo elemento del nuovo segmento nell'albero, ottenere l'elemento massimo nell'albero e confrontarlo con minOfMax
lasciando in minOfMax
il valore minimo dei due.
La risposta ideale deve essere di complessità O (n). Grazie.
bella soluzione, ma terribile questione intervista. O hai familiarità con questa struttura dati, e il problema è banale; o non lo sei, e il problema è impossibile. (A meno che tu non voglia fingere di averlo inventato durante l'intervista?) Mi chiedo se c'è un approccio più diretto, o se questa è solo una domanda di intervista schifosa. – Nemo
@ Nemo- sapevo solo come risolvere questo problema perché sapevo della struttura dei dati della coda minima, che conoscevo solo perché ho trascorso quattro ore cercando di capire come realizzarlo prima di vedere l'implementazione di due stack basata su il min-stack, che a sua volta è una domanda di intervista difficile. Penso che ci possa essere un modo più semplice per risolvere questo problema, ma onestamente non ho idea di come affrontare questo problema in nessun altro modo. – templatetypedef
Ci ho pensato un po ', e non lo vedo neanche io. Il fatto che tu voglia un solo valore alla fine (e nemmeno la sua posizione) è allettante, ma io non vedo come sfruttarlo. – Nemo