题目:maxTwoSubArrays
要求:
给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。
每个子数组的数字在数组中的位置应该是连续的。
返回最大的和。
注意事项
子数组最少包含一个数
样例:
给出数组 [1, 3, -1, 2, -1, 2]
这两个子数组分别为 [1, 3] 和 [2, -1, 2] 或者 [1, 3, -1, 2] 和 [2],它们的最大和都是 7
算法要求:
要求时间复杂度为 O(n)
解题思路:
记录每个位置左右两边的和的最大值
算法如下:
int maxTwoSubArrays(vector<int> nums) {
// write your code here
int size = nums.size();
int max = nums[0];
int num[10000] = {0};
int sum = 0;
for (int i = 0; i < size - 1; i++) {
sum += nums[i];
if (sum > max) {
max = sum;
}
num[i] = max;
if (sum < 0) {
sum = 0;
}
}
sum = 0;
max = nums[size - 1];
for (int i = size - 1; i > 0; i--) {
sum += nums[i];
if (sum > max) {
max = sum;
}
num[i - 1] += max;
if (sum < 0) {
sum = 0;
}
}
max = num[0];
for (int i = 0; i < size - 1; i++) {
if (num[i] > max) {
max = num[i];
}
}
return max;
}