LeedCode 188. 买卖股票的最佳时机 IV

编程入门 行业动态 更新时间:2024-10-10 16:21:21

LeedCode 188. 买卖股票的<a href=https://www.elefans.com/category/jswz/34/1751651.html style=最佳时机 IV"/>

LeedCode 188. 买卖股票的最佳时机 IV

一、题目

给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入:k = 2, prices = [2,4,1]
输出:2
解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。示例 2:输入:k = 2, prices = [3,2,6,5,0,3]
输出:7
解释:在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。提示:0 <= k <= 1000 <= prices.length <= 10000 <= prices[i] <= 1000

二、思路

  • 借用 买卖股票的最佳时机 III的思路,这里交易次数变为k,那么只需要创建一个 [ k ] [ 2 ] [k][2] [k][2]的数组来表示买入k次,卖出k次的状态即可,最后转移与买卖股票的最佳时机 III一致。 算法时间复杂度 O ( n k ) O(nk) O(nk) 空间复杂度 O ( k ) O(k) O(k)

三、代码

class Solution {
public:int maxProfit(int k, vector<int>& prices) {int n = prices.size();if (n == 0 || k == 0) return 0;k = min(k, n / 2); //最多购买卖出次数//vector<vector<int>> dp(k + 1, vector<int>(2)); int dp[k+1][2];memset(dp, 0, sizeof(dp));for (int i = 1; i <= k; i++) dp[i][0] = -prices[0];for (int i = 1; i < n; i++) {for (int j = 1; j <= k; j++) {dp[j][0] = max(dp[j][0], dp[j - 1][1] -prices[i]);dp[j][1] = max(dp[j][0] + prices[i], dp[j][1]);}}return dp[k][1];}
};

更多推荐

LeedCode 188. 买卖股票的最佳时机 IV

本文发布于:2024-02-13 22:24:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760862.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:最佳时机   买卖   股票   LeedCode   IV

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!