给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
输入:[−2,2,−3,4,−1,2,1,−5,3] 输出:6 解释:符合要求的子数组为[4,−1,2,1],其最大和为 6
解法1: 暴力求解
int max=-10000;
int i=0;
while(i<nums.size())
{
int sum=0;
int j=i;
while(j<nums.size())
{
sum+=nums[j];
if(sum>max) max=sum;
j++;
}
i++;
}
return max;
解法2:
如果子串A的和是负数,而子串B包含子串A,那B则不需要进行计算。这样就省去了一些计算步骤
int maxSubArray(vector<int> nums)
{
// write your code here
int n = nums.size();
int ans = -1000000;
int sum = 0;
for(int i=0; i<n; i++)
{
sum += nums[i];
if(sum > ans)
{
ans = sum;
}
if(sum < 0)
{
sum = 0; //子串和为负数,丢掉
}
}
return ans;
}