求子数组的最大和

来源:互联网 发布:个体工商户域名备案 编辑:程序博客网 时间:2024/06/06 12:56
输入一个整形数组,里有正数负数。
数组中连续的一个或多整数组成子数组,每个子数组都有一个和。
求所有子数组的和最大值。要时间复杂度为 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;}


0 0
原创粉丝点击