首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【编程之好】读书笔记:求数组的子数组之和的最大值

2012-10-21 
【编程之美】读书笔记:求数组的子数组之和的最大值问题:一个有N个整数元素的一维数组(A[0],A[1],A[2],...A[n

【编程之美】读书笔记:求数组的子数组之和的最大值
         问题:一个有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;    }    

热点排行