方法一:贪心算法,只要第二天比前一天高,就前一天买入,第二天卖出
int maxProfit(vector<int>& prices) {
const int n = prices.size();
//if(n<=1) return 0;
int profit = 0;
for(int i=1; i<n; i++) {
if(prices[i]>prices[i-1]) {
profit += prices[i]-prices[i-1];
}
}
return profit;
}
方法二:DP,状态机为每一天是否持有股票,每种情况又是前一天的两种情况的收益的函数,就可以得到状态转移的表达式
Tips:1、注意使用STL时二维矩阵的定义:https://blog.csdn.net/a819825294/article/details/52088732
2、这种方法的时间空间消耗都比较大,仅作扩展思路用即可,类似的还有讨论区有DFS算法
int maxProfit(vector<int>& prices) {
const int n = prices.size();
if(n<=1) return 0;
//vector<vector<int>>(n)(2) dp; //n*2的数组
vector<vector<int>> dp(n);
for(int i=0; i<n; i++)
dp[i].resize(2);
dp[0][0] = 0;
dp[0][1] = -prices[0];
for(int i=1; i<n; 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[n-1][0];
}