題目連結:
題目意譯:
假設你有一個陣列,其第 i 個元素代表著某個股票第 i 天的價格。
如果你只被允許完成最多一次交易(即買入以及賣出一股股票),設計一個演算法可以找到最大獲利。
注意,你無法在買入股票前賣出股票。
範例測資:
範例 1:
輸入: [7,1,5,3,6,4]
輸出: 5
解釋: 在第 2 天(價格為 1),然後賣第 5 天(價格為 6),利潤 = 6 - 1 = 5 。
並非 7 - 1 = 6 ,因為賣出的價格必須比買入價格還大(才能稱為利潤)。
範例 2:
輸入: [7,6,4,3,1]
輸出: 0
解釋: 在此例中,沒有任何交易完成,最大利潤 = 0 。
解題思維:
類似於
這題,只是現在我們要找的 (i, j) 需要滿足 i > j (因為是第 j 個數字減去第 i 個數字)。
一個方法是,可以反著掃陣列然後用上面那題更新目前最大值的方式去找到所求;
另一個則是,將更新最大值變為更新最小值,然後依照正常順序掃過陣列即可。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。