思路:
1.初始和为0,从第一个数字开始相加,若加入第n个数字后总和为负数,则抛弃之前的n个数字,从第n+1个数字开始重新加。sum=a[i]
2.若和为+,加入下一个数字为负后总和减小但仍让为+,则保存加入负数之前的子数组总和作为暂存最大连续数组和。sum+=a[i]
3.继续加入数字,直到找到最大连续数组和。
//不对
int sum=0;
int max=0;
for(int i=0;i<array.size();i++){
sum+=array[i];
if(sum<=0)
max=0;
if(sum>max)
max=sum;
}
return max;
int FindGreatestSumOfSubArray(vector<int> array) {
int sum=0;
int max=0x80000000;//初值为
if(array.size()<=0)
return max;
for(int i=0;i<array.size();i++){
if(sum<=0)
sum=array[i];//
else
sum+=array[i];//
if(sum>max)
max=sum;
}
return max;
}
int FindGreatestSumOfSubArray(vector<int> array) {
if(array.size() == 0)
return -1;
int sum = array[0];
int max = array[0];
for(size_t size = 1; size < array.size();++size)//从第二个数开始遍历
{
if(sum <= 0)
sum = array[size];
else
sum += array[size];
if(sum > max)
max = sum;
}
return max;
}
本文介绍了一种寻找数组中最大连续子数组和的有效算法。通过动态调整子数组的起点来确保子数组和的最大化,避免了穷举所有可能子数组的复杂度。算法采用循环迭代的方式,使用两个变量跟踪当前子数组的和与已知的最大和。
633

被折叠的 条评论
为什么被折叠?



