求数组任意连续一部分和大于某个数的算法

发布于 2022-09-04 20:29:53 字数 289 浏览 13 评论 0

假设一个数组长度为100
连续长度定为10
参考值为 x

如果array[0]~array[9] 的和大于x ,则array[0]是想要的点
如果array[1]~array[10] 的和大于x ,则array[1]也是想要的点
。。。。。。
如果array[y]~array[y+9] 的和大于x ,则array[y]也是想要的点

找出所有的点

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

朕就是辣么酷 2022-09-11 20:29:53

需求只是array[0]+...+array[9]>x么?

golang版本

// data int数组 l长度 x 参考值
func test(data []int, l, x int) []int {
    result := []int{}
    len := len(data)
    if len < l {
        return result
    }
    sum := 0
    for i := 0; i < l; i++ {
        sum += data[i]
    }
    if sum > x {
        result = append(result, 0)
    }
    for i := l; i < len; i++ {
        sum = sum + data[i] - data[i-l]
        if sum > x {
            result = append(result, i-l+1)
        }
    }
    return result
}

思路就是先把前l个加起来判断是否大于x,然后sum加一个新的,减掉一个老的,在判断是否大于x,循环一次O(n)

十级心震 2022-09-11 20:29:53

思路与楼上一致。C实现。

void func(int *array,int x)
{
    int i;
    int sum=0;
    for(i=0;i<10;i++)
        sum+=array[i];
    if(sum>x)
        printf("array[0]=%d\n",array[0]);

    for(i=1;i<=90;i++)
    {
        sum=sum-array[i-1]+array[i+9];
        if(sum>x)
            printf("array[%d]=%d\n",i,array[i]);
    }
}
守不住的情 2022-09-11 20:29:53

扫面一遍数组array,计算出一个新数组sum_array,其中sum_array[i+1] = array[0]+ .. + array[i](sum_array[0] = 0);
扫描一遍sum_array[i],找出所有的i, sum_array[i + 10] -sum_array[i] == x, 则i为满足条件的点。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文