代码随想录算法训练营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分钟

相关推荐
安全系统学习10 分钟前
网络安全之RCE简单分析
开发语言·python·算法·安全·web安全
TGB-Earnest2 小时前
【leetcode-合并两个有序链表】
javascript·leetcode·链表
GEEK零零七2 小时前
Leetcode 3299. 连续子序列的和
算法·leetcode·动态规划
飞飞是甜咖啡2 小时前
【机器学习】Teacher-Student框架
人工智能·算法·机器学习
蒟蒻小袁2 小时前
力扣面试150题--单词接龙
算法·leetcode·面试
ghie90903 小时前
LMD分解通过局部均值分解重构信号实现对信号的降噪
算法·均值算法·重构
零叹3 小时前
篇章十 数据结构——排序
java·数据结构·算法·排序算法
涛哥码咖4 小时前
前端十种排序算法解析
前端·算法·排序算法
朝朝又沐沐4 小时前
算法竞赛阶段二-数据结构(32)数据结构简单介绍
数据结构·算法
共享家95274 小时前
c语言(重点)
c语言·数据结构·算法