Like "Best Time to Buy Stock III" with "Longest continuous subarray"
class Solution { public: /** * @param nums: A list of integers * @return: An integer denotes the sum of max two non-overlapping subarrays */ int maxTwoSubArrays(vector<int> nums) { int n = nums.size(); vector<int> l(n), r(n); // Left l[0] = nums[0]; int lmax = l[0], sofar = l[0]; for(int i = 1; i < n; i ++) { lmax = max(nums[i], lmax + nums[i]); sofar = max(lmax, sofar); l[i] = sofar; } // Right r[n-1] = nums.back(); int rmax = nums.back(); sofar = nums.back(); for(int i = n - 2; i >= 0; i --) { rmax = max(nums[i], rmax + nums[i]); sofar = max(rmax, sofar); r[i] = sofar; } // Final int ret = INT_MIN; for(int i = 0; i < n - 1; i ++) { ret = max(ret, l[i] + r[i + 1]); } return ret; } };