拿到题目就觉得应该用dp或者贪心。
dp没找出状态方程,所以用了贪心。
思路:找到左边最小的和右边最大的,相减即为最大值,从头到尾遍历一遍就可以了。
代码:
int maxProfit(vector<int>& prices) {
if(prices.empty())
return 0;
int l = 0, r = 0;
int pf = 0;
for(int i = 0; i < prices.size(); ){
l = prices[i];
while(i < prices.size() - 1 && prices[++i] <= l){
l = prices[i];
}
r = prices[i];
while(i < prices.size() - 1 && prices[++i] >= r){
r = prices[i];
}
pf += r - l;
if(r == l)
i++;
}
if(pf <= 0)
return 0;
return pf;
}
这题错了好几遍,因为情况考虑少了,,
望共勉,同进步!