很久不做DP了 (为什么总有种把题解写成日记但是日记又好像流水账的感觉)
DP要先分节点和阶段
在这道题中,每一天就可以看作一个阶段(最明显的分段点)
因此思考,在每一天如何做出一个独立于后面阶段的决定呢(只与前面或者后面相关)
很好想的是前者:我只要在当前阶段卖出股票就行啦
那么如何获取当前阶段的最优解呢?维护一个到前一阶段为止的最小买入价即可
ok,O(n)成立!
class Solution {
public:
int maxProfit(vector<int>& prices) {
int a = prices[0];
int ans = 0;
for (auto i=1; i<prices.size(); i++){
if (a>prices[i-1])
a = prices[i-1];
ans = max(ans, prices[i]-a);
}
return ans;
}
};
我是个荒谬的人,但是却被你的温暖拯救
(努力干正事,不写流水账)