题目:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为 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。
我们知道,对于某个子数组,如果它的下一个数为正数,加上该正数和会增加;而加上一个负数,和会减少;如果当前子数组的话为负数,下一个数不论是正数还是负数,都会使得子数组的和进一步减少,因而这时候应该将子数组和重置为0。
#include "iostream"
using namespace std;
const int minvalue = (1 << 31) ;
int getMaxSum(const int a[],int size){
int sum = 0;
int maxSum = minvalue;
for (int i = 0; i < size; ++i)
{
sum += a[i];
if(sum > maxSum){
maxSum = sum;
}else if(sum < 0){
sum = 0;
}
}
return maxSum;
}
int main(int argc, char const *argv[])
{
int a[] = {1,-2,3,10,-4,7,2,-5};
cout<<minvalue<<endl;
cout<<getMaxSum(a,sizeof(a)/sizeof(int))<<endl;;
return 0;
}
http://www.cnblogs.com/python27/archive/2011/11/30/2268978.html