[leetcode]Best Time to Buy and Sell Stock III @ Python


原題地址: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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM