最大子数组 II
2018-01-29 19:29
218 查看
给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。
每个子数组的数字在数组中的位置应该是连续的。
返回最大的和。
注意事项
子数组最少包含一个数
您在真实的面试中是否遇到过这个题?
Yes
样例
给出数组
这两个子数组分别为
每个子数组的数字在数组中的位置应该是连续的。
返回最大的和。
注意事项
子数组最少包含一个数
您在真实的面试中是否遇到过这个题?
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; } };
相关文章推荐
- 42. 最大子数组 II
- lintcode -- 最大子数组II
- 最大子数组 II-LintCode
- [LeetCode] House Robber II 求循环数组中元素两两不相邻的子序列最大和
- 最大子数组 II
- lintcode(42)最大子数组 II
- 最大子数组(I, II, III,IV,V)和最大子数组乘积 (动态规划)
- 42 - 最大子数组 II
- [LeetCode] Maximum Average Subarray II 子数组的最大平均值之二
- Lintcode 最大子数组 II
- lintcode-42-最大子数组 II
- lintcode--42. 最大子数组 II
- LintCode-最大子数组 II
- [Lintcode]Maximum Subarray II 最大子数组 II
- LintCode:最大子数组 II
- lintcode 42 最大子数组 II 解析
- 最大子数组问题
- 返回一个整数数组中最大子数组的和
- 算法题:找出一个数组中相加值最大的连续序列元素
- 求数组中顺序子集和最大的值(详细图解)