• 123买卖股票的最佳时机III


    题目:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
    链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii

    法一:参考别人自己写的代码

    思路:动态规划,首先题中有两个变量,股票在第几天卖出和卖出的次数,dp[i][j]表示第i天卖出j次股票后的最大利润,状态转移方程:a = max([prices[row] - prices[j] + dp[j][col-1] for j in range(0,row)],从中仔细观察可以看出,- prices[j] + dp[j][col-1] d会被多次重复计算,所以为了减少计算次数,可以把原状态转移方程进行变形,将求最大值转换为求最小值,之所以可以这样转换,原因是分清状态转移方程中的动态量和静态量,由于prices[row]不受变量j的影响,所以是静态量,而后面两个受j的影响,所以是动态量,可以保存其最小值。

    from typing import List
    class Solution:
        def maxProfit(self, prices: List[int]) -> int:
            size = len(prices)
            # 特判
            if size <= 1:
                return 0
            # dp[i][j]表示第i天进行j次卖出后的最大获利
            dp = [[0] * 3 for _ in range(size)]
            print(dp)
            for col in range(1,3):
                # dp[0][1]表示第1天卖出1次,显然为0,所以用默认值,
                # dp[0][2]也是0,
                # 有可能是负值,所以和0进行比较
                dp[1][col] = max(0,prices[1] - prices[0])
                k = prices[0] - dp[0][col-1]
                for row in range(2,size):
                    # 由于有大量重复计算,所以每次只需计算k即可,这样很省时间
                    k = min(k, prices[row-1] - dp[row-1][col-1])
                    a = prices[row] - k
                    # # 计算a的时候,有大量重复的计算,
                    # a = max([prices[row] - prices[j] + dp[j][col-1] for j in range(0,row)])
                    dp[row][col] = max(dp[row-1][col], a)
            print(dp)
            return max(dp[-1][-1],0)
    if __name__ == "__main__":
        # prices = [3,3,5,0,0,3,1,4]
        # prices = [3,3,5,0,0,3,1,4]
        # prices = [3,2,5,0,0,3,1,4]
        prices = [1,2]
        # prices = [2,1,4]
        max_profit = Solution().maxProfit(prices)
        print(max_profit)
    View Code

    ttt

  • 相关阅读:
    fatal error LNK1123: 转换到 COFF 期间失败:文件无效或损坏
    CI:模拟进化与遗传算法
    贝叶斯网络
    朴素贝叶斯模型
    概率与不确定性(乘法法则与贝叶斯法则)
    关于“启发式”搜索的一个形象解释
    Python 字符串与数字拼接报错
    无法启动此程序因为计算机中丢失 xxx.dll
    Python 以指定的概率选取元素
    验证码之SimpleCaptcha (二)
  • 原文地址:https://www.cnblogs.com/xxswkl/p/12327570.html
Copyright © 2020-2023  润新知