zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    [LeetCode] 240
    [LeetCode] 169
    [LeetCode] 28
    [LeetCode] 27
    [LeetCode] 14
    [LeetCode] 9
    [LeetCode] 7
    [LeetCode] 2
    数据库开发规范
    Mysql优化
  • 原文地址:https://www.cnblogs.com/zuoyuan/p/3766168.html
Copyright © 2011-2022 走看看