描述
假设你有一个数组prices,长度为n,其中prices[i]是某只股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益
- 你可以多次买卖该只股票,但是再次购买前必须卖出之前的股票
- 如果不能获取收益,请返回0
- 假设买入卖出均无手续费
输入:[8,9,2,5,4,7,1]
返回值:7
说明:
在第1天(股票价格=8)买入,第2天(股票价格=9)卖出,获利9-8=1
在第3天(股票价格=2)买入,第4天(股票价格=5)卖出,获利5-2=3
在第5天(股票价格=4)买入,第6天(股票价格=7)卖出,获利7-4=3
总获利1+3+3=7,返回7
要求:空间复杂度 O(n),时间复杂度 O(n)
进阶:空间复杂度 O(1),时间复杂度 O(n)
解题思路
例 :1 5 8 4 2 3 6 4 10 7 3 2 1 6
对于这个样例来说,最优的交易应该是:
第1天买,第3天卖
第5天买,第7天卖
第8天买,第10天卖
第13天买,第14天卖
我们再观察可以发现,其实可以简化成,只要是两天之间是上涨的,那我们就要这一段的收益。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int ans=0;
for(int i=1;i<prices.size();i++){
if(prices[i-1]<prices[i]){
ans+=prices[i]-prices[i-1];
}
}
return ans;
}
};