当前位置: 首页 > news >正文

代码随心录算法训练营第四十五天| 动态规划08

121. 买卖股票的最佳时机

视频讲解:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili

代码随想录

dp[i][0]表示的是截至第i天股票的最小值,取负数

dp[i][1]表示的是截至第i天股票的最大利润

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        length=len(prices)
        if length==0:
            return 0
        dp=[[0]*2 for _ in range(length)]
        dp[0][0]=-prices[0]
        dp[0][1]=0
        for i in range(1,length):
            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]

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

视频讲解:动态规划,股票问题第二弹 | LeetCode:122.买卖股票的最佳时机II_哔哩哔哩_bilibili

代码随想录

不需要二维数组,一维就可以解决

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        dp=[0]*len(prices)
        for i in range(1,len(prices)):
            dp[i]=max(dp[i-1],dp[i-1]+prices[i]-prices[i-1])
        return dp[-1]

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

这道题一下子就难度上来了,关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。

视频讲解:动态规划,股票至多买卖两次,怎么求? | LeetCode:123.买卖股票最佳时机III_哔哩哔哩_bilibili

代码随想录

dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金

一天一共就有五个状态,

  1. 没有操作
  2. 第一次持有股票
  3. 第一次不持有股票
  4. 第二次持有股票
  5. 第二次不持有股票
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if len(prices)==0:
            return 0
        dp=[[0]*5 for _ in range(len(prices))]
        dp[0][1]=-prices[0]
        dp[0][3]=-prices[0]
        for i in range(1,len(prices)):
            dp[i][0]=dp[i-1][0]
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i])
            dp[i][2]=max(dp[i-1][2],dp[i-1][1]+prices[i])
            dp[i][3]=max(dp[i-1][3],dp[i-1][2]-prices[i])
            dp[i][4]=max(dp[i-1][4],dp[i-1][3]+prices[i])
        return dp[-1][4]
http://www.dtcms.com/a/29967.html

相关文章:

  • DeepSeek-R1使用生存指南
  • 金融学-金融机构
  • 利用非球面透镜进行激光光束重组
  • Linux中DataX使用第四期
  • CUDA跟Nvidia适配处理
  • AIP-148 标准域
  • LeetCode 热题 100 283. 移动零
  • 记录:Docker 安装记录
  • 应用篇| 小白本地部署DeepSeek-R1
  • 动态规划进阶:Python实现最长递增子序列(LIS)问题及其优化
  • 【Python项目】基于知识图谱的百科问答系统
  • 两相四线步进电机的步距角为什么是1.8度
  • AGM芯片推出TensorLight框架,全面拥抱AI+边缘推理市场
  • CCF-CSP第26次认证第一题——归一化处理【有效数字的处理setprecision,printf的格式设置】
  • AI会取代人类?云电脑会取代传统PC吗?
  • SpringBoot项目集成MinIO
  • FX5U PLC模拟量转换FC (S_ITR源代码)
  • 用JMeter给要登录的操作做压力测试
  • Pytorch实现之特征损失与残差结构稳定GAN训练,并训练自己的数据集
  • Linux相关命令
  • c++17 std::timespec_get 简介
  • OnlyOffice:前端编辑器与后端API实现高效办公
  • Flutter 中的单例模式
  • 【电机控制器】ESP32-C3语言模型——DeepSeek
  • 【C语言】自定义类型:联合体和枚举
  • 迭代器操作函数的使用
  • Spring Boot框架总结(超级详细)
  • 进程消亡(20250222)
  • 每日一题——376. 摆动序列
  • 【MySQL】第八弹---全面解析数据库表的增删改查操作:从创建到检索、排序与分页