如何找到子数组椭圆的最大和

时间:2018-03-31 22:19:33

标签: c ellipsis

我正在尝试使用ellipses function找到子数组的最大总和。 (并且不使用数组)。

实施例

{−2, 1, −3, 4, −1, 2, 1, −5, 4}

期望输出

{4, −1, 2, 1} = 6

有许多算法可以做到这一点,比如蛮力,分而治之等等,但它们都涉及数组并从某个索引中访问数字。

到目前为止我的代码:

#include <stdio.h>
#include <stdarg.h>

int getsum(int x, ...) {
    va_list(list);
    va_start(list,x);
    int k,s;
    for (k=0; k<x; k++) {
        s+=va_arg(list,int *);
    }
    va_start(list,x);
}

我的问题是我必须经历所有索引 我不能只写list[x], 任何线索或想法都会非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,我的方法:

count()

我正在寻找当前部分和的最大距离以及到目前为止找到的最小距离。为此,不需要随机访问,因此不需要数组。第一个参数#include <stdio.h> #include <stdarg.h> int getsum(int n, ...){ va_list(list); int k,s = 0; int maxsum = 0; int minsum = 0; va_start(list,n); for (k=0; k<n; k++){ s+=va_arg(list,int); if(s < minsum){ minsum = s; } if(s - minsum > maxsum){ maxsum = s - minsum; } } va_end(list); return maxsum; } int main(){ printf("%d\n", getsum(9, -2, 1, -3, 4, -1, 2, 1, -5, 4)); } 是输入大小。

但由于您无法将可变大小的数据传递给此函数,因此它可能不是非常有用