108. Leetcode 188. 买卖股票的最佳时机 IV (动态规划-股票交易)
步骤一、确定状态:
确定dp数组及下标含义
dp[i] 表示的是在第i天可以获取的最大利润,每天会有持有股票和不持有 股票两种状态,这个是第二维度,还是用0和1表示。 而对于每一种状态, 这里还会有交易次数的记录k次, 这个是第三维度。所以dp[天数][当前是 否持股][卖出的次数]
步骤二、推断状态方程:
未持有股票的状态 dp[i][0][k]系列 如果k=0的话,那么还是dp[i][0][0]等于0,开始的状态
如果k>0的话, 未持有表示要么延续之前的状态,要么是当天卖了出去 延续之前的状态, 即dp[i-1][0][k] 当天卖了出去,说明前一天是持有股票的, 即dp[i-1][1][k-1]+prices[i] 这里取最大就是 dp[i][0][k]=max(dp[i-1][0][k], dp[i-1][1][k-1]+prices[i])
持有股票的状态dp[i][1][k]系列
如果k=0的话, 说明是第一次买入的状态, 此时利润要么是延续之前的,要么 是今天刚买的
延续之前的, 即dp[i-1][1][0]
今天刚买的, 即昨天是没有股票的, dp[i-1][0][0]-prices[i]
所以这里取最大是dp[i][1][0] = max(dp[i-1][1][0], dp[i-1][0][0]-prices[i])
如果k>0,也是这个思路, dp[i][1][k-1] = max(dp[i-1][1][k-1], dp[i-1][0][k- 1]-prices[i])
同样的,等于k取不到,因为这时候已经完成了K笔交易,不能再买了。 dp[i][1][k]=float("-inf")
步骤三、规定初始条件:
初始条件:
全局初始化为0, 然后第0天的所有状态必须都初始化出来: dp[0][0][0] = 0: 开始啥也没干, 利润0;
dp[0][1][0] = -prices[0]: 第0天持有股票,且进行了0次 交易,这是第一次买入,利润-prices[0]
步骤四、计算顺序:
遍历方式会是两层循环了,首先会从1到len(prices)遍历天, 然后再从1到k遍历交易次数,正向遍历
class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:if len(prices) < 2 or k == 0:return 0# dp[天数][当前是否持股][卖出的次数]dp = [[[0 for _ in range(k+1)] for _ in range(2)] for _ in range(len(prices))]# 初始化dp[0][0][0], dp[0][1][0] = 0, -prices[0]for i in range(1, k):dp[0][0][i], dp[0][1][i] = float("-inf"), float("-inf") # 第一天完不成交易# 遍历for i in range(1, len(prices)):for k in range(1, k+1):dp[i][0][k] = max(dp[i-1][0][k], dp[i-1][1][k-1] + prices[i])dp[i][1][k-1] = max(dp[i-1][1][k-1], dp[i-1][0][k-1] - prices[i])# 最后一天不持有股票的值return max(dp[-1][0])
108. Leetcode 188. 买卖股票的最佳时机 IV (动态规划-股票交易)相关推荐
- Leetcode 188.买卖股票的最佳时机IV
买卖股票的最佳时机IV 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多笔交易(你必 ...
- LeetCode 188. 买卖股票的最佳时机 IV(动态规划)
1. 题目 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多笔交易(你必须在再次购买 ...
- leetcode 188. 买卖股票的最佳时机 IV(dp)
给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意:你不能同时参 ...
- 107. Leetcode 123. 买卖股票的最佳时机 III (动态规划-股票交易)
步骤一.确定状态: 确定dp数组及下标含义 dp[i] 表示的是在第i天可以获取的最大利润,每天会有持有股票和不持有股票两种状态,这个是 第二维度,还是用0和1表示. 而对于每一种状态,这里还会有交易 ...
- 106. Leetcode 122. 买卖股票的最佳时机 II (动态规划-股票交易)
步骤一.确定状态: 确定dp数组及下标含义 dp[i]是一个长度为len(prices)的一维数组,表示的是在第i天持有股票 步骤二.推断状态方程: 第i天持有股票,即dp[i][1], 那么两个状态 ...
- 算法训练第五十天 | 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV
动态规划part11 123.买卖股票的最佳时机III 题目描述 思路 拓展 188.买卖股票的最佳时机IV 题目描述 思路 易错点 123.买卖股票的最佳时机III 题目链接:123.买卖股票的最佳 ...
- 【第50天| ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV 】
123.买卖股票的最佳时机III class Solution {public:int maxProfit(vector<int>& prices) {vector<int& ...
- 第43天| 123.买卖股票的最佳时机III、 188.买卖股票的最佳时机IV
1.题目链接:123. 买卖股票的最佳时机 III 题目描述: 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 两笔 交易 ...
- 188. 买卖股票的最佳时机 IV(JavaScript)
给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前 ...
最新文章
- Linux 内核源代码分析 chap 2 存储管理 (5)
- 用python画图-用python进行简单的画图操作
- 《编译与反编译技术》——第一章 引论 1.1节编译器与解释器
- elastic search java_elasticsearch学习四、JAVA调用
- erdas遥感图像几何校正_定量/高光谱遥感之—光谱分析技术
- javascript练习----复选框全选,全不选,反选
- R语言聚类算法之期望最大化聚类(Expectation Maximization Algorithm)
- python调包侠_sklearn调包侠之K-Means
- UVA455 - Periodic Strings(周期串)
- Centos6.5安装FastDFS
- android 关闭服务代码,android – 调用stopService方法时,服务不会停止
- sympy 求微分方程_Sympy笔记一
- Atitti usrQBf1801 翻页控件规范 v2
- 【FPGA教程案例66】硬件开发板调试6——基于FPGA的UDP网口通信和数据传输
- 大华(华瑞)MVP网络通讯教程实例
- 【时间序列】ICDE 2021丨时间序列相关研究论文汇总
- 超全万字汇总!科研论文绘图实操干货!11类Matplotlib图表,含代码
- MATLAB常用快捷键:自动补全、自动排版、注释、去掉注释
- 博瑞森mysql培训_MySQL DBA高级视频教程 博瑞森一线DBA大神亲授
- 【Gulimall】Spring Cloud:spring-cloud-gateway、spring-cloud-openfeign,Alibaba的注册+配置中心Nacos
热门文章
- js 获取今天以及前一周/前20天时间
- proguard的简单配置说明
- Socket编程基本流程实践
- linux 单独取出本机IP地址
- 当一个有性能问题的数据库摆在你的面前,作为责任人,你的处理思路是什么?...
- oracle asm之添加和修改asm磁盘组
- AT89C51 单片机在电话远程控制器中的应用
- 得到INSERT和UPDATE中使用的值
- PAT甲级1139 First Contact (30 分):[C++题解] 图论、暴力枚举两个点、hash映射
- 李永乐线性代数手写笔记-向量