求连续子数组最大和
输入一个整形的数组,数组中有正数也有负数,数组中一个或者多个组成一个子数组,求子数组和中的最大值
输入 1,2,-3,5,6,3,-2,3,-10,2
输出 15
输入1,2,3,5,6,3,2,3,10,2
输出 35
-2, - 4,-3,-6,-6,-8,-2,-1,-10,-2
输出 -1
思路
寻找规律,发现数组只要相加不小于等于0,就可以继续相加,否则从0开始
int arr_max(int buf[],int len)
{
if (buf == nullptr || len <= 0)
return 0;
int tep = 0,sum=0,val=0x80000000;
// 定于val为最小值0x80000000,防止全是负数的出现
for (int i = 0; i < len; i++)
{
if (sum <= 0)
sum =buf[i];
else
sum = sum + buf[i];
if (sum > val)
val = sum;
}
return val;
}
测试用例
- 有正数也有负数
- 全为正数,全为负数
- 特殊情况,空指针