初一解題格外神清氣爽。

題目

輸入陣列prices,表示當日股價。你可以選擇任一天買入,並在之後的日期賣出,求最大利潤。

解法

獲利=當日價-歷史低價,很直覺的知道只要維護一個lowest變數就可以求出最大利潤。
不就是單純的Greedy嗎,怎麼會有DP標籤?
這篇討論有不錯回答,大意是說其實利潤可當成dp陣列,每次更新dp[i]=max(dp[i-1],todayProfit),最後回傳dp[-1]。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        lowest = math.inf
        ans = 0
        for p in prices:
            if p < lowest:
                lowest = p
            elif p-lowest > ans:
                ans = p-lowest

        return ans