给定一个整数数组,找出两个
不重叠
子数组使得它们的和最大。
每个子数组的数字在数组中的位置应该是连续的。
每个子数组的数字在数组中的位置应该是连续的。
返回最大的和。
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 int[] leftArray = new int[nums.size()]; int max = Integer.MIN_VALUE; int tmp = 0; for (int i = 0; i < nums.size() - 1; i++) { if (tmp <= 0) { tmp = nums.get(i); } else { tmp += nums.get(i); } if (tmp > max) { max = tmp; } leftArray[i] = max; } int[] rightArray = new int[nums.size()]; max = Integer.MIN_VALUE; tmp = 0; for (int i = nums.size() - 1; i > 0; i--) { if (tmp <= 0) { tmp = nums.get(i); } else { tmp += nums.get(i); } if (tmp > max) { max = tmp; } rightArray[i] = max; } int result = Integer.MIN_VALUE; for (int i = 0; i < nums.size() - 1; i++) { result = (result > leftArray[i] + rightArray[i+1]) ? result : leftArray[i] + rightArray[i+1]; } return result; } }