原题链接:Leecode 122. 买卖股票的最佳时机 II
2022年写的贪心:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res=0;
int m=prices.size();
int l=0,r=0;
for(int i=1;i<m;i++)
{
if(prices[i]>prices[r]) r++;
else
{
res+=(prices[r]-prices[l]);
l=r=i;
}
}
res+=(prices[r]-prices[l]);
return res;
}
};
24年写的动态规划:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int res = 0, num = prices.size();
vector<vector<int>> dp(num, vector<int>(2));//dp[i]用于表示第i天的最大利润
dp[0][0] = 0; // 0表示当天买入了新股票
dp[0][1] = 0; // 1表示当天没买入新股票
int min_price = prices[0];
for (int i = 1; i < num; i++) {
//第i天买入股票有两种情况,dp[i][0]是两种情况的最大值
//1.前一天没买入,今天买入,max(dp[i - 1][1], dp[i - 1][1] + prices[i] - prices[i - 1])
//2.前一天买入了,今天卖出,再买入今天的股票,dp[i-1][0]+prices[i] - prices[i - 1]
dp[i][0] = max(max(dp[i - 1][1], dp[i - 1][1] + prices[i] - prices[i - 1]),dp[i-1][0]+prices[i] - prices[i - 1]);
//第i天没买入股票,则dp[i][1]则是前一天两种情况的最大值
dp[i][1] = max(dp[i - 1][0], dp[i - 1][1]);
}
return max(dp[num - 1][0], dp[num - 1][1]);
}
};