【编程之美】读书笔记:求数组的子数组之和的最大值
问题:一个有N个整数元素的一维数组(A[0],A[1],A[2],...A[n-1]),这个数组中子数组之和的最大值是多少?
该子数组是连续的。例如 数组:[1,-2,3,5,-3,2]返回8; 数组:[0,-2,3,5,-1,2]返回9
解法一:常规解法,时间复杂度为O(N^2)设Sum[i,...,j]为数组A中第i个元素到第j个元素的和(0<=i<=j<n),遍历所有的Sum[i,...,j],并且利用Sum[i,...,j]=Sum[i,....j-1]+A[j];
int MaxSum(int* a, int n) { int sum=a[0]; int b=0; for(int i=0; i<n; i++) { if(b<0) //// b=a[i]; //小于0,重新计算起点 else b+=a[i]; //大于0,就想加 if(sum<b) //保存最大的和 sum=b; } return sum; }