Es ist ein einfaches Problem, wenn die Beschreibung so lautet:
Sie erhalten eine Reihe von Preisen, wobei „Preise[i]“ der Preis einer bestimmten Aktie am i-ten Tag ist.
Sie möchten Ihren Gewinn maximieren, indem Sie einen einzigen Tag für den Kauf einer Aktie und einen anderen Tag in der Zukunft für den Verkauf dieser Aktie auswählen.
Geben Sie den maximalen Gewinn zurück, den Sie mit dieser Transaktion erzielen können. Wenn Sie keinen Gewinn erzielen können, geben Sie 0 zurück.Beispiel 1:
Eingabe: Preise = [7,1,5,3,6,4]
Ausgabe: 5Erklärung: Kaufen Sie am Tag 2 (Preis = 1) und verkaufen Sie am Tag 5 (Preis = 6), Gewinn = 6-1 = 5.
Beachten Sie, dass der Kauf am 2. Tag und der Verkauf am 1. Tag nicht zulässig sind, da Sie vor dem Verkauf kaufen müssen.Beispiel 2:
Eingabe: Preise = [7,6,4,3,1]
Ausgabe: 0Erklärung: In diesem Fall werden keine Transaktionen durchgeführt und der maximale Gewinn = 0.
Einschränkungen:
1 <= Preise.Länge <= 105
0 <= Preise[i] <= 104
Zuerst würden Sie darüber nachdenken, zu sortieren und kleinere und größere Zahlen zu erhalten, aber es könnte sein, dass Sie aus dem Array vorher und nachher unterschiedliche Bereiche oder Zahlen erhalten, was dazu führen würde, dass der Unterschied nicht dem entspricht, was erwartet wird, also vergessen Sie das Sortieren.
Eine gute Lösung in diesem Fall besteht darin, beim Iterieren des Arrays die Mindest- und Höchstwerte sowie die Differenz zu berücksichtigen. Wenn das Minimum kleiner als erwartet ist, setzen Sie alles zurück, andernfalls machen Sie einfach weiter und aktualisieren Sie das Maximum, wenn es kleiner als das Maximum ist, und erhalten Sie immer Diff, nicht nur das Maximum. Andernfalls können Sie scheitern, wenn wir weniger Minimum, aber keine große maximale Zahl erhalten .
class Solution { public int maxProfit(int[] prices) { int min = prices[0]; int max = prices[0]; int diff = 0; for(int i=1;iprices[i]){ min = prices[i]; max = prices[i]; } else if (max < prices[i]) { max = prices[i]; } if(diff < (max - min)) { diff = max - min; } } return diff; } } Laufzeit: 2 ms, schneller als 77,66 % der Java-Online-Einreichungen für die beste Zeit zum Kaufen und Verkaufen von Aktien.
Speichernutzung: 61,4 MB, weniger als 80,34 % der Java-Online-Einreichungen für die beste Zeit zum Kaufen und Verkaufen von Aktien.
Sie können noch weiter verbessern, indem Sie „Min“ entfernen und nur „Max“ verwenden, aber der Unterschied ist kein großes Problem, stellt aber dennoch eine Leistungsverbesserung dar.
—
Das ist es! Wenn es sonst noch etwas zu besprechen gibt, können Sie gerne einen Kommentar hinterlassen. Wenn ich etwas verpasst habe, lassen Sie es mich wissen, damit ich es entsprechend aktualisieren kann.
Bis zum nächsten Beitrag! :)
Das obige ist der detaillierte Inhalt vonLeetcode – Top-Interview –. Beste Zeit zum Kaufen und Verkaufen von Aktien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!