输入一个整形数组,里有正数负数。
数组中连续的一个或多整数组成子数组,每个子数组都有一个和。
求所有子数组的和最大值。要时间复杂度为 O(n)。
例如输入的数组为 1,-2,3,10,-4,7,2,-5,和最大的子数组为3,10,-4,7,2。
数组中连续的一个或多整数组成子数组,每个子数组都有一个和。
求所有子数组的和最大值。要时间复杂度为 O(n)。
例如输入的数组为 1,-2,3,10,-4,7,2,-5,和最大的子数组为3,10,-4,7,2。
因此输出为该子数组的和 18 。
#include <iostream>
using namespace std;
//遍历求和,当和为负数时置零后继续求和
//求和过程中保存最大值
int maxsum_subarrary(int data[],int len)
{
int sum = 0,result = -(1<<31);//result初始化为int型最小负数,以处理数组元素全为负数的情况
for(int i=0; i<len; ++i)
{
sum += data[i];
if(result<sum) result = sum;
if(sum<0) sum = 0;
}
return result;
}
int main()
{
int data[] = {1,-2,3,10,-4,7,2,-5};
int data1[] = {-1,-2,-3,-4};
cout << "The max sum is " << maxsum_subarrary(data,sizeof(data)/sizeof(int)) << endl;
cout << "The max sum is " << maxsum_subarrary(data1,sizeof(data1)/sizeof(int)) << endl;
return 0;
}