Best Time to Buy and Sell Stock III
DP
int maxProfit(vector<int> &prices) { // Start typing your C/C++ solution below // DO NOT write int main() function if(prices.empty()) return 0; vector<int> profit1(prices.size(),0); vector<int> profit2(prices.size(),0); int minPrice = prices[0]; for(int i=1;i<prices.size();i++) { minPrice = min(minPrice,prices[i]); profit1[i] = max(profit1[i-1],prices[i]-minPrice); } int maxPrice = prices[prices.size()-1]; for(int i=prices.size()-2;i>=0;i--) { maxPrice = max(maxPrice,prices[i]); profit2[i] = max(profit2[i+1],maxPrice-prices[i]); } int maxProfit = 0; for(int i=0;i<prices.size();i++) maxProfit = max(maxProfit,profit1[i]+profit2[i]); return maxProfit; }