代码随想录算法训练营19期第50天

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

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

代码随想录

初步思路:买卖股票的最佳时机I。

总结:

关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖.

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

五个状态:

0: 没有操作; 1:第一次持有股票; 2:第一次不持有股票; 3:第二次持有股票; 4:第二次不持有股票

五个递推公式:

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])

用时:60分钟

188.买卖股票的最佳时机IV

视频讲解:动态规划来决定最佳时机,至多可以买卖K次!| LeetCode:188.买卖股票最佳时机4_哔哩哔哩_bilibili

代码随想录

初步思路:买卖股票的最佳时机III。

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

2k个状态:

0: 没有操作; 1:第一次持有股票; 2:第一次不持有股票; 3:第二次持有股票; 4:第二次不持有股票; ....

2k-1:第k次持有股票; 2k:第k次不持有股票;

2k个递推公式:

j is odd -> dp[i][j] = max(dp[i - 1][j], dp[i - 1][j-1] - prices[i])

j is even -> dp[i][j] = max(dp[i - 1][j], dp[i - 1][j-1] + prices[i])

用时:45分钟

相关推荐
✎ ﹏梦醒͜ღ҉繁华落℘14 小时前
编程基础--数据结构
数据结构·算法
小毅&Nora14 小时前
【后端】【C++】泛型算法:从传统到C++20 Ranges的进化之旅
算法·c++20·泛函算法
ULTRA??14 小时前
最小生成树kruskal算法实现python,kotlin
人工智能·python·算法
sin_hielo14 小时前
leetcode 1523
数据结构·算法·leetcode
代码游侠15 小时前
复习——线性表
linux·c语言·数据结构·学习·算法
秋深枫叶红15 小时前
嵌入式第二十九篇——数据结构——树
数据结构·学习·算法·深度优先
能源系统预测和优化研究15 小时前
【原创代码改进】基于贝叶斯优化的PatchTST综合能源负荷多变量时间序列预测
算法·回归·transformer·能源
小龙报15 小时前
【C语言初阶】动态内存分配实战指南:C 语言 4 大函数使用 + 经典笔试题 + 柔性数组优势与内存区域
android·c语言·开发语言·数据结构·c++·算法·visual studio
小龙报15 小时前
【算法通关指南:算法基础篇(三)】一维差分专题:1.【模板】差分 2.海底高铁
android·c语言·数据结构·c++·算法·leetcode·visual studio
小白程序员成长日记15 小时前
2025.12.07 力扣每日一题
算法·leetcode·职场和发展