您的位置:首页 > 其它

最大子数组 II

2018-01-29 19:29 218 查看
给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。

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

返回最大的和。


 注意事项


子数组最少包含一个数

您在真实的面试中是否遇到过这个题? 

Yes

样例

给出数组 
[1, 3, -1, 2, -1, 2]


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


class Solution {

public:

    /*

     * @param nums: A list of integers

     * @return: An integer denotes the sum of max two non-overlapping subarrays

     */

    int maxTwoSubArrays(vector<int> &nums) {

        // write your code here

int size = nums.size(), i = 0, sum = 0, maxValue = 0;

        int *left = new int[size];

        sum = maxValue = left[0] = nums[0];

        for(i=1; i<size; i++) {

            if(sum < 0) {

                sum = nums[i];

            }

            else {

                sum += nums[i];

            } 

            if(sum > maxValue) {

                maxValue = sum;

            }

            left[i] = maxValue;

        }

        int *right = new int[size];

        sum = maxValue = right[size-1] = nums[size-1];

        for(i=size-2; i>=0; i--) {

            if(sum < 0) {

                sum = nums[i];

            }

            else {

                sum += nums[i];

            } 

            if(sum > maxValue) {

                maxValue = sum;

            }

            right[i] = maxValue;

        }

        int result = 0x80000000;

        for(i=0; i<size-1; i++) {

            if(result < left[i]+right[i+1]){

                result = left[i]+right[i+1];

            }

    

        }

        delete[] left;

        delete[] right;

        return result;

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: