1、贪心
我们可以每次都对股票进行买入和卖出操作,当且仅当我们本次的操作获得的利润大于0时,我们才将此次的利润加入最终利润中,否则我们此次利润为0。
class Solution {
public:
int maxProfit(vector<int> &prices) {
int res = 0;
for (int i = 1; i < prices.size(); ++i) {
res += max(0, prices[i] - prices[i - 1]);
}
return res;
}
};
2、动态规划法$$
我们可以利用两个变量 d p 0 dp0 dp0和 d p 1 dp1 dp1分别表示当天不持有和持有股票的状态。我们在么一天中都进行计算,取维持现状不变或买入卖出股票后的最大值,在一天结束之后我们更新状态。最终我们返回 d p 0 dp0 dp0即可。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int n = prices.size();
int dp0 = 0, dp1 = -prices[0];
for (int i = 1; i < n; ++i) {
int newDp0 = max(dp0, dp1 + prices[i]);
int newDp1 = max(dp1, dp0 - prices[i]);
dp0 = newDp0;
dp1 = newDp1;
}
return dp0;
}
};