【描述】
从输入数组中找出两个连续子串,并且使这 两个连续字串和 之间的和最大。
输入:1,-1,2,2,3,-3,4,-4,5,-5
输出:13
即 {2,2,3,-3,4}
和 {5}
的和(8+5=13)
【code】
参考:面试题42:连续子数组的最大和
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int findGreatSumOfSubarray(vector<int>& nums, int start,int end)
{
int max = 0;
int sum = 0;
for (int i = start; i < end; i++)
{
if (sum<=0)
{
sum = nums[i];
}
else
{
sum += nums[i];
}
if (sum>max)
{
max = sum;
}
}
return max;
}
int main()
{
int n;
vector<int>nums;
cin >> n;
for (int i = 0; i < n; i++)
{
int data;
cin >> data;
nums.push_back(data);
}
int ans = 0;
int size = nums.size();
for (int i = 0; i < size; i++)
{
int tmp = findGreatSumOfSubarray(nums, 0, i) + findGreatSumOfSubarray(nums, i, size);
if (tmp>ans)
{
ans = tmp;
}
}
cout << ans << endl;
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)