III is a kind of I. But it require 2 maximum value. So scan from begin and scan from end to record the maximum value for currrent index.
Then scan the maximum array to obtain the global maximum.
1 class Solution { 2 public: 3 int maxProfit(vector<int> &prices) { 4 if (prices.size() < 2) return 0; 5 int len = prices.size(), rec = prices[0], result = 0; 6 vector<int> left(len, 0), right(len, 0); 7 for (int i = 1; i < len; i++) { 8 left[i] = max(left[i-1], prices[i] - rec); 9 rec = min(rec, prices[i]); 10 } 11 rec = prices[len-1]; 12 for (int i = len-2; i >= 0; i--) { 13 right[i] = max(right[i+1], rec - prices[i]); 14 rec = max(prices[i], rec); 15 } 16 for (int i = 0; i < len; i++) { 17 result = max(result, left[i] + right[i]); 18 } 19 return result; 20 } 21 };
时间: 2024-10-15 04:18:40