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

Posted yuhong1103

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了188. 买卖股票的最佳时机 IV相关的知识,希望对你有一定的参考价值。

 1 // 一次交易由买入和卖出构成,至少需要两天。所以说有效的限制 k 应该不超过 n/2,如果超过,就没有约束作用了,相当于 k = +infinity。
 2 class Solution 
 3 {
 4 public:
 5     int maxProfit(int K, vector<int>& prices) 
 6     {
 7         if(prices.empty()) return 0;
 8         int n = prices.size();
 9         if(K > n/2)
10         {
11             vector<vector<int>> dp(n,vector<int>(2,0));
12             dp[0][0] = 0;
13             dp[0][1] = -prices[0];
14             for(int i = 1;i < n;i ++)
15             {
16                 dp[i][0] = max(dp[i - 1][0],dp[i - 1][1] + prices[i]);
17                 dp[i][1] = max(dp[i - 1][1],dp[i - 1][0] - prices[i]);
18             }
19             return dp[n - 1][0];
20         }
21         vector<vector<vector<int>>> dp(n,vector<vector<int>>(K+1,vector<int>(2,0)));
22 
23         for(int k = 1;k <= K;k ++)
24         {
25             dp[0][k][0] = 0;
26             dp[0][k][1] = -prices[0];
27         }
28 
29         for(int i = 1;i < n;i ++)
30         {
31             for(int k = 1;k <= K;k ++)
32             {
33                 dp[i][k][0] = max(dp[i-1][k][0],dp[i-1][k][1] + prices[i]);
34                 dp[i][k][1] = max(dp[i-1][k][1],dp[i-1][k-1][0] - prices[i]);
35             }
36         }
37 
38         int res = dp[n-1][0][0];
39         for(int k = 1;k <= K;k ++)
40         {
41             res = max(res,dp[n-1][k][0]);
42         }
43         return res;
44     }
45 };

 

以上是关于188. 买卖股票的最佳时机 IV的主要内容,如果未能解决你的问题,请参考以下文章

[Leetcode188] 买卖股票的最佳时机IV 动态规划 解题报告

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

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

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

188. 买卖股票的最佳时机 IV(Hard)

算法: 买卖股票的最佳时机 IV 188. Best Time to Buy and Sell Stock IV