mi è stato chiesto questa domanda mentre intervistava per una startup e ho visto di nuovo nella recente gara almassimizzazione del profitto per il dato quotazioni di borsa
** La domanda:
Ti viene data la i prezzi delle azioni per un insieme di giorni. Ogni giorno puoi acquistare un'unità di azioni, vendere qualsiasi numero di unità di azioni che hai già acquistato o non fare nulla. Qual è il profitto massimo che si può ottenere con la pianificazione della strategia di trading in modo ottimale? **
Esempi (L'ingresso vale a dire il no di giorni può variare)
5 3 2 => profitto = 0 // dato che il prezzo diminuisce ogni giorno, il profitto massimo possiamo fare = 0
1 2 100 => profitto = 197
1 3 1 2 => profitto = 3 // abbiamo comprare a 1 vendere a 3, poi abbiamo acquistare a 1 e vendere a 2 .. profitto totale = 3
La mia soluzione:
a) Trova il giorno in cui il prezzo delle azioni è stato il più grande. Continua a comprare 1 unità di scorta fino a quel giorno.
b) Se tale giorno è l'ultimo giorno quindi chiudere:
altro: vendere tutte le scorte in quel giorno e dividere la matrice dopo quel giorno e ricorsione sugli elementi rimanenti
c) unire i profitti
es 1 4 1 2 3
a) più alto prezzo delle azioni il giorno 2 .. quindi abbiamo acquistare azioni il giorno 1 e venderlo il giorno 2 (utile = 3) poi ricorsivamente nei giorni rimanenti: 1 2 3
b) Il prezzo massimo è 3 (il giorno 5) in modo da continuare a comprare magazzino il giorno 3 e il giorno 4 e vendere il giorno 5 (utile = (3 * 2 - 3 = 3)
c) Totale utile = 3 + 3 = 6
La complessità per questo risulta essere O (n^2). questa soluzione ha superato 10 degli 11 casi ma ha superato il limite di tempo su un ultimo test case (cioè il più grande input)
Quindi la mia domanda è: qualcuno può pensare a una soluzione più efficiente a questo problema? Esiste una soluzione di programmazione dinamica?
P.S: questa è la prima volta che faccio una domanda qui. quindi per favore fammi sapere se ho bisogno di migliorare/aggiungere cose a questa domanda
Nel tuo esempio "1 3 1 2 4" il risultato dovrebbe essere 9 non 7 :) prezzo Max è 4 non 2. "1 4 1 2 3" sarebbe mostrare il proprio algoritmo migliore :) –
nell'esempio, 1 3 1 2 4, perché il prezzo più alto è il giorno 2? non è l'ultimo giorno ha il prezzo più alto? –
C'è poco aggiornamento, ora uno può solo comprare e vendere al massimo N volte, quale sarà l'approccio a questa nuova condizione? – uniquephase