class Solution {
public:
/**
* @param nums: A list of integers
* @return: An integer denotes the sum of max two non-overlapping subarrays
*/
void maxSubArray(vector<int> &nums,int first,int end,int flag,vector<int> &array) {
// write your code here
int sum=nums[first];
int max=nums[first];
int i;
if(flag==1)
i=first+1;
else
i=first-1;
for(;flag==1?i<=end:i>=end;){
if(sum<=0){
sum=nums[i];
}
else
sum+=nums[i];
if(max<sum)
max=sum;
// cout<<max<<endl;
array.push_back(max);
if(flag==1)
i++;
else
i--;
}
}
int maxTwoSubArrays(vector<int> nums) {
// write your code here
if(nums.empty())
return 0;
int n=nums.size();
int max;
int sum;
vector<int> left,right;
left.push_back(nums[0]);
right.push_back(nums[n-1]);
maxSubArray(nums,0,n-1,1,left);
maxSubArray(nums,n-1,0,0,right);
for(int i=0;i<n-1;i++){
sum=left[i]+right[n-i-2];
if(i==0)
max=sum;
else if(max<sum)
max=sum;
}
return max;
}
};