123. 买卖股票的最佳时机 III(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台)
思路:依旧是dp的股票类问题,题目说最多可以买卖两次,那么就定义一个二维的dp数组,第一维长度依然是数组长度,第二维长度为2*2=4,依次记录到某个节点时第一次持有股票、第一次不持有股票、第二次持有股票、第二次不持有股票的情况。
int maxProfit(vector<int>& prices) {
int size = prices.size();
if(size==1) return 0;
vector<vector<int>> dp(size, vector<int>(4, 0));
dp[0][0]=-prices[0];
dp[0][1]=0;
dp[0][2]=-prices[0];
dp[0][3]=0;
for(int i=1; i<size; i++){
dp[i][0] = max(dp[i-1][0], -prices[i]);
dp[i][1] = max(dp[i-1][0]+prices[i], dp[i-1][1]);
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]);
}
return dp[size-1][3];
}
188. 买卖股票的最佳时机 IV(题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台)
思路:由二次买卖股票进阶到k次,那么处理结果也是一样的,就把二维dp数组的第二维的长度修改为2*