public class Solution {
/**
* @param nums: A list of integers
* @return: An integer denotes the sum of max two non-overlapping subarrays
*/
public int maxTwoSubArrays(ArrayList<Integer> nums) {
// write your code
if(nums.size()<2){
return 0;
}
int []maxLeftSum=new int[nums.size()];
int []maxRightSum=new int[nums.size()];
int max=Integer.MIN_VALUE;
int cur=0;
for(int i=0;i<nums.size();i++){
cur+=nums.get(i);
max=Math.max(max, cur);
maxLeftSum[i]=max;
cur=cur>0?cur:0;
}
max=Integer.MIN_VALUE;
cur=0;
for(int i=nums.size()-1;i>=0;i--){
cur+=nums.get(i);
max=Math.max(max, cur);
maxRightSum[i]=max;
cur=cur>0?cur:0;
}
int maxResult=Integer.MIN_VALUE;
for(int i=0;i<maxLeftSum.length-1;i++){
maxResult=Math.max(maxResult, maxLeftSum[i]+maxRightSum[i+1]);
}
return maxResult;
}
}