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的主要内容,如果未能解决你的问题,请参考以下文章