題目連結:
題目意譯:
你被給定一陣列 prices 其中 prices[i] 代表著第 i 天某特定股票之價格。
計算你最大可獲得之利潤。你最多只能完成兩次的交易。
注:你不能同時進行多個交易(即再次買入股票前,必須賣掉現有的)。
限制:
1 ≦ prices.length ≦ 10 ^ 5
0 ≦ prices[i] ≦ 10 ^ 5
範例測資:
範例 1:
輸入: prices = [3,3,5,0,0,3,1,4]
輸出: 6
解釋: 於第 4 天買入(價格 = 0),然後於第 6 天(價格 = 3)賣出,利潤 = 3 - 0 = 3。
接著於第 7 天買入(價格 = 1),然後於第 8 天賣出(價格 = 4),利潤 = 4 - 1 = 3。
範例 2:
輸入: prices = [1,2,3,4,5]
輸出: 4
解釋: 於第 1 天買入(價格 = 1),然後於第 5 天(價格 = 5)賣出,利潤 = 5 - 1 = 4。
注意你於第一天買入,於第二天再次買入並於之後賣出,因為此時你同時進行多筆交易。
你需先在再次買入前賣出。
範例 3:
輸入: prices = [7,6,4,3,1]
輸出: 0
解釋: 這個例子,沒有任何交易成立,即最大利潤 = 0。
解題思維:
類似幾天前的股價問題(
這題),我們可以畫出狀態轉移圖,如下圖:
其中:
S0 代表第一次可以買入股票的狀態、
S1 代表第一次可以賣出股票的狀態、
S2 代表第二次可以買入股票的狀態、
S3 代表第二次可以賣出股票的狀態、
R 代表不能在進行任何買賣的狀態(也就是交易已滿兩次)。
然後就如同該題算出每一天每種狀態下的最大獲利,取其中的最大值即是所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。