121. 买卖股票的最佳时机
知识点:动规
状态:看思路ok
思路:
维护一个二维dp,dp【i】【0】表示第i+1天不持有股票时候的情况:
有两种情况,昨天就不持有股票所以直接等于昨天,或者是今天卖出了,将昨天持有股票的价格+今日价格
dp【i】【0】表示第i+1天持有股票时候的情况:
两种:昨天就持有了,所以等于昨天持有的价格,以及今天刚买(-price(i))
class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<vector<int>> dp(prices.size(),vector<int>(2,0)); // dp [] [0] 为手头没有股票,【1】 为有
dp[0][0] = 0;
dp[0][1] = -prices[0];
for(int i = 1; i <prices.size(); i++) {
dp[i][0] = max(dp[i-1][0],dp[i-1][1] + prices[i]);
dp[i][1] = max(dp[i-1][1], - prices[i]);
}
return dp[prices.size()-1][0];
}
};
122. 买卖股票的最佳时机 II
知识点:动规
状态:一遍过
思路:
class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<vector<int>> dp(prices.size(),vector<int>(2,0));
dp[0][0] = 0;
dp[0][1] = -prices[0];
for(int i = 1; i < prices.size(); i++) {
dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]);
dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i]);
}
return dp[prices.size()-1][0];
}
};