本文主要是介绍代码随想录Day50:买卖股票的最佳时机III、买卖股票的最佳时机IV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
买卖股票的最佳时机III
class Solution {
public:int maxProfit(vector<int>& prices) {vector<vector<int>> dp(prices.size(), vector<int>(5, 0));dp[0][1] = - prices[0];dp[0][3] = - prices[0];for(int i = 1; i < prices.size(); i++){dp[i][0] = dp[i - 1][0];dp[i][1] = max(dp[i - 1][1], dp[i - 1][0] - prices[i]);dp[i][2] = max(dp[i - 1][2], dp[i - 1][1] + prices[i]);dp[i][3] = max(dp[i - 1][3], dp[i - 1][2] - prices[i]);dp[i][4] = max(dp[i - 1][4], dp[i - 1][3] + prices[i]);}return dp[prices.size() - 1][4];}
};
买卖股票的最佳时机IV
class Solution {
public:/*dp[i][j]为第i天j状态下的最大现金;j = 0:不操作;j = 1:第一次买入;j = 2:第一次卖出;j = 3:第二次买入;···0 <= j <= 2 * k + 1;*/int maxProfit(int k, vector<int>& prices) {vector<vector<int>> dp(prices.size(), vector<int>(2 * k + 1, 0));for(int j = 1; j < 2 * k + 1; j += 2){dp[0][j] = - prices[0];}for(int i = 1; i < prices.size(); i++){for(int j = 0; j < 2 * k - 1; j += 2){dp[i][j + 1] = max(dp[i - 1][j + 1], dp[i - 1][j] - prices[i]);dp[i][j + 2] = max(dp[i - 1][j + 2], dp[i - 1][j + 1] + prices[i]);}}return dp[prices.size() - 1][2 * k];}
};
这篇关于代码随想录Day50:买卖股票的最佳时机III、买卖股票的最佳时机IV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!