原題地址:https://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/
題意:
Say you have an array for which the ith element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete at most two transactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
解題思路:只允許做兩次交易,這道題就比前兩道要難多了。解法很巧妙,有點動態規划的意思:開辟兩個數組f1和f2,f1[i]表示在price[i]之前進行一次交易所獲得的最大利潤,f2[i]表示在price[i]之后進行一次交易所獲得的最大利潤。則f1[i]+f2[i]的最大值就是所要求的最大值,而f1[i]和f2[i]的計算就需要動態規划了,看代碼不難理解。
代碼:
class Solution: # @param prices, a list of integer # @return an integer def maxProfit(self, prices): length=len(prices) if length==0: return 0 f1=[0 for i in range(length)] f2=[0 for i in range(length)] minV=prices[0]; f1[0]=0 for i in range(1,length): minV=min(minV, prices[i]) f1[i]=max(f1[i-1],prices[i]-minV) maxV=prices[length-1]; f2[length-1]=0 for i in range(length-2,-1,-1): maxV=max(maxV,prices[i]) f2[i]=max(f2[i+1],maxV-prices[i]) res=0 for i in range(length): if f1[i]+f2[i]>res: res=f1[i]+f2[i] return res