求乱序排序的N个数中连续K个数的和的最大值。

1、有一个整形数组,其元素包含正整数和负整数,找到它的所有子集中元素之和最大的那个子集。
如:[12,-3,54,-42,4,5,7],结果为63[12,-3,54]。
要求复杂度为O(n)。

int func(int n, int a[])
{
  
int sum = 0, b = 0, i;

  
for (i = 1; i <= n; i++)
  {
    
if (b>0) b+=a[i];
    
else b=a[i];
    
if (b>sum) sum = b;
  }
  
return sum;

 

2、求乱序排序的N个数中连续K个数的和的最大值。

具体思路:

假设有N:a1 a2 a3 a4 a5 ... aN

需要求出所有连续K的和,那么,先求出a1~ak的和sum

a(2)~a(k+1)的和=sum - a1 + a(k+1)---------------------(1)

a(3)~a(k+2)的和=(1)式结果-a(2) + a(k+2)

Code

 

posted @ 2009-04-10 17:22  yangbinhe  阅读(990)  评论(0编辑  收藏  举报