Best Time to Buy and Sell Stock
Du erhältst die Preise einer Aktie über mehrere Tage hinweg, einen Preis pro Tag. Du kannst an einem Tag eine Aktie kaufen und sie an einem späteren Tag verkaufen. Der Gewinn ist der Verkaufspreis abzüglich des Kaufpreises, und du möchtest den größtmöglichen Gewinn erzielen. Wenn jeder Handel Verlust bedeuten würde, handelst du einfach nicht und erzielst 0.
Betrachte die Preise [7, 2, 5, 9, 1, 4]. Wenn du am Tag 1 für 2 kaufst und am Tag 3 für 9 verkaufst, erzielst du 7, und kein anderes Tagespaar ist besser. Ein Kauf für 1 am Tag 4 scheint verlockend, weil es der günstigste Tag ist, aber am einzigen späteren Tag liegt der Verkaufspreis bei 4, sodass dieser Handel nur 3 einbringt.
Alle Tagespaare auszuprobieren funktioniert, ist aber bei langen Preislisten viel zu langsam. Stattdessen kannst du die Tage mit nur einem Durchlauf durchgehen. Wenn du heute verkaufst, ist der beste Kauftag der günstigste Tag bisher. Behalte also unterwegs den niedrigsten Preis im Blick. Der beste Gewinn für heute ist der heutige Preis abzüglich des niedrigsten Preises, und die Antwort ist der größte dieser Gewinne.
Schreibe eine Funktion namens maxProfit, die eine Liste von Ganzzahlen prices erhält, wobei prices[i] der Aktienkurs am Tag i ist, und den größten Gewinn zurückgibt, den du erzielen kannst, indem du an einem Tag kaufst und an einem späteren Tag verkaufst. Wenn kein Handel Gewinn bringt, gib 0 zurück.
Einschränkungen: 1 ≤ prices.length ≤ 10^5, 0 ≤ prices[i] ≤ 10^4.
Funktion
- arg1integer-array
- Gibt zurückinteger
Beispiele
- Eingabe
- arg1 = [7, 2, 5, 9, 1, 4]
- Ausgabe
- 7
- Eingabe
- arg1 = [9, 7, 4, 3, 1]
- Ausgabe
- 0
+12 versteckte Tests beim Einreichen
Tipps
Öffne sie nacheinander. Jeder verrät ein bisschen mehr.
Der Verkauf erfolgt immer nach dem Kauf. Wähle einen Verkaufstag: Welcher Kauftag bringt dafür den höchsten Gewinn?
Für einen bestimmten Verkaufstag ist der beste Kauftag der günstigste Tag davor. Du musst nicht jedes Mal erneut nach diesem Tag suchen, wenn du ihn dir merkst, während du vorwärtsgehst.
Gehe die Tage der Reihe nach durch und behalte zwei Zahlen im Blick: den niedrigsten Preis bisher und den besten Gewinn bisher. Vergleiche an jedem Tag den heutigen Preis abzüglich des niedrigsten Preises mit dem besten Gewinn und aktualisiere anschließend den niedrigsten Preis.
Eine vollständige Lösungserklärung zu dieser Aufgabe folgt bald.
Ähnliche Aufgaben
Aufgaben mit denselben Ideen. Wer zwei oder drei davon löst, behält das Muster.
Python
def maxProfit(prices):
# Schreibe hier den CodeFall 1
Fall 2
Eingabe
arg1 = [7, 2, 5, 9, 1, 4]
Erwartet
7