lintcode(42)最大子数组 II

来源:互联网 发布:淘宝店铺策划书童装 编辑:程序博客网 时间:2024/05/04 12:35

描述:

给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。
每个子数组的数字在数组中的位置应该是连续的。
返回最大的和。

样例:

给出数组 [1, 3, -1, 2, -1, 2]
这两个子数组分别为 [1, 3] 和 [2, -1, 2] 或者 [1, 3, -1, 2] 和 [2],它们的最大和都是 7

思路:

将数组划分成两个子数组,分别寻找最大子数组

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 nums.get(0) + nums.get(1);        }        int ret = Integer.MIN_VALUE;        for(int i = 0;i<nums.size() - 1;i++){            int left = max(nums , 0 , i);            int right = max(nums , i + 1 , nums.size() - 1);            int temp = left + right;            ret = ret<temp?temp:ret;        }                return ret;            }        public int max(ArrayList<Integer> nums , int start , int end){        if(start == end){            return nums.get(start);        }        int sum = 0;        int result = nums.get(start);        for(int i = start;i<=end;i++){            sum += nums.get(i);            if(sum > result){                result = sum;            }else if(sum < 0){                sum = 0;            }        }                return result;    }}


0 0
原创粉丝点击