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 ;
}
}
本文介绍了一种解决最大子数组问题的改进方法,通过双重动态规划寻找数组中两个非重叠且和最大的子数组。算法详细解释了如何计算左边界最大子数组和右边界最大子数组,并最终找出两者相加的最大值。
4万+

被折叠的 条评论
为什么被折叠?



