Maximum Subarray II最大子数组 II
Description
Given an array of integers, find two non-overlapping subarrays which have the largest sum. The number in each subarray should be contiguous. Return the largest sum.
public class Solution {
/*
* @param nums: A list of integers
* @return: An integer denotes the sum of max two non-overlapping subarrays
*/
public int maxTwoSubArrays(List<Integer> nums) {
// write your code here
if(nums == null){
return 0 ;
}
int size = nums.size() ;
int[] left = new int[size] ;
int[] right = new int[size] ;
int sum = 0 ;
int max = Integer.MIN_VALUE ;
for(int i = 0 ; i < size ; i++){
sum = sum + nums.get(i) ;
max = Math.max(sum , max) ;
sum = Math.max(0 , sum) ;
left[i] = max ;
}
sum = 0 ;
max = Integer.MIN_VALUE ;
for(int i = size-1 ; i >= 0 ; i--){
sum = sum + nums.get(i) ;
max = Math.max(sum , max) ;
sum = Math.max(0 , sum) ;
right[i] = max ;
}
max = Integer.MIN_VALUE ;
for(int i =0 ; i < size-1 ; i++){
max = Math.max(max , left[i]+right[i+1]);
}
return max ;
}
}