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 &prices) { 4 if (prices.size() < 2) return 0; 5 int len = prices.size(), rec = prices[0], result = 0; 6 vector 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 };