思路:使用贪心
设置两个int类型,一个存储手中股票的最低股价low,一个存储手中股票的最高股价high,遍历第1到第n-1天,每当第二天股票下跌时就迅速将利益结算,用high-low表示这支股票的最大收益,然后买第二天的股票,low和high都置为第二天的股价,随着时间推移,股票股价越来越高,low不动,high值越来越高,直到再次出现下跌的时候,迅速结算。
贪心在于,一下跌就结算,不再等。如果再等,收益一定会比直接结算更低,这是可以证明的,细想一下就能明白。
一遍过真的很爽!
class Solution {
public:
int maxProfit(vector<int>& prices) {
int low=0, high=0, ans=0;
low = high = prices[0];
for(int i = 0 ;i < prices.size()-1; ++i){
if(prices[i+1] < prices[i]){
ans += high - low;
low = high = prices[i+1];
}
else{
high = prices[i+1];
}
}
ans += high - low;
return ans;
}
};