class Solution {
public:
int maxProfit(vector<int> &prices) {
int ret = 0;
vector<int> dppre, dppost;
int size = prices.size();
if(size < 2){
return ret;
}
dppre.resize(size + 1, 0);
dppost.resize(size + 1, 0);
int tmpmin = 0x7fffffff, tmpmaxprofit = 0;
dppre[0] = 0;
tmpmin = min(tmpmin, prices[0]);
dppre[1] = max(0, prices[1] - tmpmin);
tmpmin = min(tmpmin, prices[1]);
tmpmaxprofit = max(tmpmaxprofit, dppre[1]);
for(int i = 2; i < size; ++i){
dppre[i] = max(prices[i] - tmpmin, tmpmaxprofit);
tmpmaxprofit = max(tmpmaxprofit, dppre[i]);
tmpmin = min(tmpmin, prices[i]);
}
int tmpmax = -1;
tmpmaxprofit = 0;
dppost[size - 1] = 0;
tmpmax = max(tmpmax, prices[size - 1]);
tmpmaxprofit = max(tmpmaxprofit, dppost[size - 1]);
dppost[size - 2] = max(tmpmaxprofit, tmpmax - prices[size - 2]);
tmpmaxprofit = max(tmpmaxprofit, dppost[size - 2]);
tmpmax = max(tmpmax, prices[size -2]);
for(int i = size - 3; i >= 0; --i){
dppost[i] = max(tmpmaxprofit, tmpmax - prices[i]);
tmpmax = max(tmpmax, prices[i]);
tmpmaxprofit = max(tmpmaxprofit, dppost[i]);
}
for(int i = 0; i + 1 < size; ++i){
ret = max(ret, dppre[i] + dppost[i + 1]);
}
ret = max(ret, dppre[size - 1]);
ret = max(ret, dppost[0]);
return ret;
}
};
leetcode Best Time to Buy and Sell
最新推荐文章于 2023-02-28 14:37:52 发布