股票买卖
1054. 股票买卖
题目链接
1054. 股票买卖
给定一个长度为 的数组,数组中的第 个数字表示一个给定股票在第 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
输入格式
第一行包含整数 ,表示数组长度。
第二行包含 个不大于 的正整数,表示完整的数组。
输出格式
输出一个整数,表示最大利润。
数据范围
输入样例1:
输出样例1:
输入样例2:
输出样例2:
样例解释
样例1:在第 天(股票价格 = )的时候买入,在第 天(股票价格 = )的时候卖出,最大利润 = 。注意利润不能是 , 因为你不能在买入股票前卖出股票。
样例2:在这种情况下, 不进行任何交易, 所以最大利润为 。
解题思路
后缀最值
枚举选择买入第 天的股票以及选择 天后能卖出股票的最大收益
- 时间复杂度:
代码
1055. 股票买卖 II
题目链接
1055. 股票买卖 II
给定一个长度为 的数组,数组中的第 个数字表示一个给定股票在第 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
输入格式
第一行包含整数 ,表示数组长度。
第二行包含 $$N 个不大于 的正整数,表示完整的数组。
输出格式
输出一个整数,表示最大利润。
数据范围
输入样例1:
输出样例1:
输入样例2:
输出样例2:
输入样例3:
输出样例3:
样例解释
样例1:在第 天(股票价格 = )的时候买入,在第 天(股票价格 = )的时候卖出, 这笔交易所能获得利润 = 。随后,在第 天(股票价格 = )的时候买入,在第 天(股票价格 = )的时候卖出, 这笔交易所能获得利润 = 。共得利润 。
样例2:在第 天(股票价格 = )的时候买入,在第 天 (股票价格 = )的时候卖出, 这笔交易所能获得利润 = 。注意你不能在第 天和第 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
样例3:在这种情况下, 不进行任何交易, 所以最大利润为 。
解题思路
状态机dp
-
状态表示:
-
- 表示前 天且第 天没有股票的最大利润
-
- 表示前 天且第 天有股票的最大利润
-
状态计算:
-
-
两种状态,即第 天是否有股票直接的转移,可能是同一种状态的转移,即状态里面保持有无股票不变,否则状态之间互相转移
- 时间复杂度:
代码
1056. 股票买卖 III
题目链接
1056. 股票买卖 III
给定一个长度为 的数组,数组中的第 个数字表示一个给定股票在第 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。
注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
输入格式
第一行包含整数 ,表示数组长度。
第二行包含 个不大于 的正整数,表示完整的数组。
输出格式
输出一个整数,表示最大利润。
数据范围
输入样例1:
输出样例1:
输入样例2:
输出样例2:
输入样例3:
输出样例3:
样例解释
样例1:在第 天(股票价格 = )的时候买入,在第 天(股票价格 = )的时候卖出,这笔交易所能获得利润 = 。随后,在第 天(股票价格 = )的时候买入,在第 天 (股票价格 = )的时候卖出,这笔交易所能获得利润 = 。共得利润 。
样例2:在第 天(股票价格 = )的时候买入,在第 天 (股票价格 = )的时候卖出, 这笔交易所能获得利润 = 。注意你不能在第 天和第 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
样例3:在这种情况下, 不进行任何交易, 所以最大利润为 。
解题思路
前缀最值
设定两种单一交易:从某天开始交易最大的利润以及某天结束交易的最大利润。枚举结束交易的那天即可
- 时间复杂度:
代码
1057. 股票买卖 IV
题目链接
1057. 股票买卖 IV
给定一个长度为 的数组,数组中的第 个数字表示一个给定股票在第 天的价格。
设计一个算法来计算你所能获取的最大利润,你最多可以完成 笔交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。一次买入卖出合为一笔交易。
输入格式
第一行包含整数 和 ,表示数组的长度以及你可以完成的最大交易数量。
第二行包含 个不超过 的正整数,表示完整的数组。
输出格式
输出一个整数,表示最大利润。
数据范围
输入样例1:
输出样例1:
输入样例2:
输出样例2:
样例解释
样例1:在第 天 (股票价格 = ) 的时候买入,在第 天 (股票价格 = ) 的时候卖出,这笔交易所能获得利润 = 。
样例2:在第 天 (股票价格 = ) 的时候买入,在第 天 (股票价格 = ) 的时候卖出, 这笔交易所能获得利润 = 。随后,在第 天 (股票价格 = ) 的时候买入,在第 天 (股票价格 = ) 的时候卖出, 这笔交易所能获得利润 = 。共计利润 .
解题思路
状态机dp
-
状态表示
-
- 表示前 天交易了 次且第 天没有股票的最大利润
-
- 表示前 天交易了 次且第 天有股票的最大利润
-
状态计算:
-
-
状态转移类似,不过交易天数变化当且仅当交易完成时,同时可利用滚动数组优化空间
- 时间复杂度:
代码
1058. 股票买卖 V
题目链接
1058. 股票买卖 V
给定一个长度为 的数组,数组中的第 个数字表示一个给定股票在第 天的价格。
设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):
你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
卖出股票后,你无法在第二天买入股票 (即冷冻期为 天)。
输入格式
第一行包含整数 ,表示数组长度。
第二行包含 个不超过 的正整数,表示完整的数组。
输出格式
输出一个整数,表示最大利润。
数据范围
输入样例:
输出样例:
样例解释
对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出],第一笔交易可得利润 ,第二笔交易可得利润 ,共得利润 。
解题思路
状态机dp
-
状态表示:
-
- 表示前 天且第 天没有股票且不处于冷冻期的最大利润
-
- 表示前 天且第 天有股票的最大利润
-
- 表示前 天且第 天处于冷冻期的最大利润
-
状态计算:
-
-
-
多了一个状态,冷冻期的前一天一定是有股票且当天卖出股票;没有股票且不处于冷冻期要么状态不变,要么前一天处于冷冻期;有股票要么状态不变要么前一天没有股票且不处于冷冻期
- 时间复杂度:
代码
1059. 股票买卖 VI
题目链接
1059. 股票买卖 VI
给定一个长度为 的数组,数组中的第 个数字表示一个给定股票在第 天的价格,再给定一个非负整数 ,表示交易股票的手续费用。
设计一个算法来计算你所能获取的最大利润。
你可以无限次地完成交易,但是你每次交易都需要支付手续费。
注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
输入格式
第一行包含两个整数 和 ,分别表示数组的长度以及每笔交易的手续费用。
第二行包含 个不超过 的正整数,表示完整的数组。
输出格式
输出一个整数,表示最大利润。
数据范围
输入样例:
输出样例:
样例解释
在第 天(股票价格 = )的时候买入,在第 天(股票价格 = )的时候卖出,这笔交易所能获得利润 = 。随后,在第 天(股票价格 = )的时候买入,在第 天 (股票价格 = )的时候卖出,这笔交易所能获得利润 = 。共得利润 。
解题思路
状态机dp
当交易完成时扣除手续费即可
- 时间复杂度:
代码
__EOF__

本文链接:https://www.cnblogs.com/zyyun/p/15989282.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!