day48
买卖股票的最佳时机
leetcode:121. 买卖股票的最佳时机
动态规划
代码实现
/*
意义:dp[i][0]下标为i天持有股票的最大收益;dp[i][1]下标为i天不持股的最大收益
递推:
之前买入、当天买入:dp[i][0] = max(dp[i-1][0],-prices[i]);
之前卖出、当天卖出:dp[i][1] = max(dp[i-1][1],dp[i-1][0] + prices[i]);
初始化:
dp[0][0] = -prices[0];
d[[0][1] = 0;
其余为0
遍历:ltr
*/
class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<vector<int>> dp(prices.size(),vector<int>(2,0));
dp[0][0] = -prices[0];
for(int i = 1;i < prices.size();i++){
dp[i][0] = max(dp[i-1][0],-prices[i]);
dp[i][1] = max(dp[i-1][1],dp[i-1][0] + prices[i]);
}
return max(dp[prices.size()-1][0] , dp[prices.size()-1][1]);
}
};
买卖股票的最佳时机Ⅱ
leetcode:122. 买卖股票的最佳时机 II
动态规划
思路
区别在于可以重复买入、售出。
售出是一样的,区别在于购入时。由于可以重复购入,每次递推要带上之前的收益。
代码实现
class Solution {
public:
int maxProfit(vector<int>& prices) {
vector<vector<int>> dp(prices.size(),vector<int>(2,0));
dp[0][0] = -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 max(dp[prices.size() - 1][0],dp[prices.size()-1][1]);
}
};
标签:vector,买卖,max,60,最佳时机,prices,dp,size
From: https://www.cnblogs.com/tazdingo/p/18088509