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

相关推荐
风中的微尘6 小时前
39.网络流入门
开发语言·网络·c++·算法
西红柿维生素6 小时前
JVM相关总结
java·jvm·算法
ChillJavaGuy8 小时前
常见限流算法详解与对比
java·算法·限流算法
sali-tec8 小时前
C# 基于halcon的视觉工作流-章34-环状测量
开发语言·图像处理·算法·计算机视觉·c#
你怎么知道我是队长10 小时前
C语言---循环结构
c语言·开发语言·算法
艾醒10 小时前
大模型面试题剖析:RAG中的文本分割策略
人工智能·算法
纪元A梦12 小时前
贪心算法应用:K-Means++初始化详解
算法·贪心算法·kmeans
_不会dp不改名_12 小时前
leetcode_21 合并两个有序链表
算法·leetcode·链表
mark-puls12 小时前
C语言打印爱心
c语言·开发语言·算法
Python技术极客12 小时前
将 Python 应用打包成 exe 软件,仅需一行代码搞定!
算法