• 【代码随想录算法训练营】第49天 | 第九章 动态规划(十)+ 复习第20天 第六章 二叉树(五)


    主要内容

    股票问题

    动态规划题目

    121. 买卖股票的最佳时机

    思路分析

    本题目是只能交易一次
    分析第i天的情况
    1、第i天持有股票:
    1.1 第i-1天就持有股票, dp[i][0]=dp[i-1][0]
    1.2 第i天买入股票,dp[i][0] = -prices[i] (只交易一次,第i天买入,则之前没有交易)
    2、第i天不持股票
    2.1 第i-1天不持股票,dp[i][1]=dp[i-1][1]
    2.2 第i天卖出股票,dp[i][1] = prices + dp[i-1][1]

    代码

    class Solution:
        # dp[i][0]第i天持有股票的最大利润,dp[0][1]第i天不持有股票的最大利润
        # 递推公式
        # dp[i][0]=max(第i-1天持有股票,第i天买入股票)=max(dp[i-1][0], -prices[i])
        # dp[i][1]=max(第i-1天不持股票,第i天卖出股票)=max(dp[i-1][1], prices[i]+dp[i-1][0])
    
        def maxProfit(self, prices: List[int]) -> int:
            n = len(prices)
            dp = [[0] * 2 for _ in range(n)]
            # 初始化
            dp[0][0] = -prices[0]
            dp[0][1] = 0
            for i in range(1, n):
                dp[i][0] = max(dp[i-1][0], -prices[i])
                dp[i][1] = max(dp[i-1][1], prices[i] + dp[i-1][0])
            return dp[-1][1]    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    122.买卖股票的最佳时机II

    思路分析

    本题目是可以交易多次
    分析第i天的情况
    1、第i天持有股票:
    1.1 第i-1天就持有股票, dp[i][0]=dp[i-1][0]
    1.2 第i天买入股票,dp[i][0] =dp[i-1][1] -prices[i] (交易多次,算上前一天不持股票获利)
    2、第i天不持股票
    2.1 第i-1天不持股票,dp[i][1]=dp[i-1][1]
    2.2 第i天卖出股票,dp[i][1] = prices + dp[i-1][1]

    代码

    class Solution:
        # dp[i][0]第i天持有股票的最大利润,dp[0][1]第i天不持有股票的最大利润
        # 递推公式
        # dp[i][0]=max(第i-1天持有股票,第i天买入股票)=max(dp[i-1][0], dp[i-1][1]-prices[i])
        # dp[i][1]=max(第i-1天不持股票,第i天卖出股票)=max(dp[i-1][1], prices[i]+dp[i-1][0])
        def maxProfit(self, prices: List[int]) -> int:
            n = len(prices)
            dp = [[0] * 2 for _ in range(n)]
            dp[0][0] = -prices[0]
            dp[0][1] = 0
            for i in range(1, n):
                dp[i][0] = max(dp[i-1][0], dp[i-1][1]-prices[i])
                dp[i][1] = max(dp[i-1][1], prices[i]+dp[i-1][0])
            return dp[-1][1]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    网络安全中的欺骗攻击与防御技术
    一元多项式
    idea:如何连接数据库
    Linux18 Shell编程
    springmvc第十四个练习(异常处理)
    Dubbo基本原理
    WMS仓储管理系统的功能与WCS系统有什么区别
    iframe与主窗口通信
    大数据关键技术:常规机器学习方法
    非零基础自学Java (老师:韩顺平) 第7章 面向对象编程(基础部分) 7.7 作用域
  • 原文地址:https://blog.csdn.net/jhl1102/article/details/127750784