求乱序排序的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;
}
{
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