LintCode:最大子数组 II

给定一个整数数组,找出两个不重叠子数组使得它们的和最大。

每个子数组的数字在数组中的位置应该是连续的。

返回最大的和。

您在真实的面试中是否遇到过这个题?  
Yes
样例给出数组 [1, 3, -1, 2, -1, 2],这两个子数组分别为 [1, 3][2, -1, 2]或者 [1, 3, -1, 2][2],它们的最大和都是7
注意

子数组最少包含一个数

挑战
要求时间复杂度为O(n) Expand  

相关题目   Expand 

解题思路:
先左边遍历数组,记录该数组的每个元素的左的最大值,
再右边遍历数组,记录该数组的每个元素的右最大值。
所求结果既是左边最大值+右边最大值的最大值

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 nums) {
        // write your code
          if (nums == null || nums.size() < 2)
               return 0;
          int len = nums.size();
          int[] lsum = new int[len];
          int[] rsum = new int[len];
          int sum = 0;
          int minsum = 0;
          int max = Integer.MIN_VALUE;
          for(int i=0;i0;i--){
               sum += nums.get(i);
               max = Math.max(max, sum-minsum);
               minsum = Math.min(sum, minsum);
               rsum[i] = max;
          }
          max = Integer.MIN_VALUE;
          for(int i=0;i



你可能感兴趣的:(LintCode:最大子数组 II)