Best Time to Buy and Sell Stock
Otrzymujesz ceny jednej akcji z kolejnych dni, jedną cenę na dzień. Możesz kupić jedną akcję w wybranym dniu i sprzedać ją w późniejszym dniu. Zysk to cena sprzedaży minus cena zakupu. Chcesz osiągnąć jak największy zysk. Jeśli każda transakcja przyniosłaby stratę, po prostu nie dokonujesz transakcji i zarabiasz 0.
Weźmy ceny [7, 2, 5, 9, 1, 4]. Kupując za 2 w dniu 1 i sprzedając za 9 w dniu 3, zarabiasz 7, a żadna inna para dni nie daje większego zysku. Kupno za 1 w dniu 4 wydaje się kuszące, bo to najtańszy dzień, ale w jedynym późniejszym dniu cena sprzedaży wynosi 4, więc taka transakcja przynosi zaledwie 3.
Sprawdzenie każdej pary dni działa, ale przy długich listach cen jest zdecydowanie zbyt wolne. Zamiast tego możesz przejść przez dni tylko raz. Jeśli sprzedajesz dzisiaj, najlepszym dniem zakupu jest najtańszy dzień do tej pory, więc po drodze zapamiętuj najniższą cenę. Najlepszy zysk na dziś to dzisiejsza cena minus najniższa cena, a odpowiedzią jest największa z tych wartości.
Napisz funkcję o nazwie maxProfit, która otrzymuje listę liczb całkowitych prices, gdzie prices[i] to cena akcji w dniu i, i zwraca największy zysk, jaki możesz osiągnąć, kupując akcje jednego dnia i sprzedając je późniejszego dnia. Jeśli żadna transakcja nie przynosi zysku, zwróć 0.
Ograniczenia: 1 ≤ prices.length ≤ 10^5, 0 ≤ prices[i] ≤ 10^4.
Funkcja
- arg1integer-array
- Zwracainteger
Przykłady
- Wejście
- arg1 = [7, 2, 5, 9, 1, 4]
- Wyjście
- 7
- Wejście
- arg1 = [9, 7, 4, 3, 1]
- Wyjście
- 0
+12 ukrytych testów przy wysłaniu
Podpowiedzi
Otwieraj je po kolei. Każda zdradza trochę więcej.
Sprzedaż zawsze następuje po zakupie. Wybierz dzień sprzedaży: który dzień zakupu przyniesie największy zysk?
Dla danego dnia sprzedaży najlepszym dniem zakupu jest najtańszy wcześniejszy dzień. Nie musisz za każdym razem szukać go ponownie, jeśli pamiętasz o nim podczas przechodzenia do kolejnych dni.
Przejdź przez dni po kolei i zapisuj dwie liczby: najniższą dotąd cenę oraz dotąd największy zysk. Każdego dnia porównaj dzisiejszą cenę pomniejszoną o najniższą cenę z najlepszym zyskiem, a następnie zaktualizuj najniższą cenę.
Pełne omówienie tego zadania pojawi się wkrótce.
Podobne zadania
Zadania oparte na tych samych pomysłach. Rozwiązanie dwóch lub trzech utrwala schemat.
Python
def maxProfit(prices):
# Wpisz kod tutajPrzypadek 1
Przypadek 2
Wejście
arg1 = [7, 2, 5, 9, 1, 4]
Oczekiwane
7