#3286. 股票交易最大利润
股票交易最大利润
题目描述
给定一个长度为 N 的数组,数组中的第 i 个数字表示一个给定股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润,你最多可以完成 k 笔交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。一次买入卖出合为一笔交易。
输入格式
- 第一行包含整数 N 和 k,表示数组的长度以及你可以完成的最大交易笔数
- 第二行包含 N 个不超过 10000 的非负整数,表示完整的数组
输出格式
输出一个整数,表示最大利润
数据范围
- 1 ≤ N ≤ 10⁵
- 1 ≤ k ≤ 100
输入样例1
3 2
2 4 1
输出样例1
2
输入样例2
6 2
3 2 6 5 0 3
输出样例2
7
样例解释
样例1:
在第 1 天(股票价格 = 2)买入,第 2 天(价格 = 4)卖出,利润 = 4-2 = 2
样例2:
- 第 2 天(价格 = 2)买入,第 3 天(价格 = 6)卖出,利润 = 6-2 = 4
- 第 5 天(价格 = 0)买入,第 6 天(价格 = 3)卖出,利润 = 3-0 = 3
总利润 = 4 + 3 = 7
解题提示
- 需要使用动态规划来解决此问题
- 考虑状态表示:
f[i][j]
表示第 i 天完成 j 笔交易的最大利润 - 注意交易限制条件(不能同时持有多笔交易)
- 时间复杂度应优化至 O(N*k) 级别
补充说明:
- 题目强调交易次数限制和不能同时持有多笔交易的约束条件
- 数据范围较大(N≤10⁵),需要高效算法
- 样例解释清晰展示了交易时机的选择和利润计算方式
- 适合考察动态规划的状态设计和转移优化能力
- 题目来自LeetCode
相关
在下列比赛中: