许多子数组求和查询

Posted

技术标签:

【中文标题】许多子数组求和查询【英文标题】:Many Subarray Sum Queries 【发布时间】:2018-03-05 08:10:24 【问题描述】:

子数组问题:给定整数数组 A(只有正数),是否存在一个任意长度且总和为 S 的连续子数组?对此的滑动窗口解决方案是 O(N)。

现在,如果我们在静态数组上有很多这样的查询 S,我们可以进行预处理。我们可以计算 O(N^2) 中的所有子数组和并将它们存储在哈希表中。这也占用了 O(N^2) 空间。然后我们可以处理 O(1) 中的查询,只需从哈希表中查找 S

我的问题是,是否有一些 O(N log N) 预处理?即使这意味着将查询降低到 O(log N)。

【问题讨论】:

Sliding window solution to this is O(N) 方法是什么?您是否充分指出了问题所在? 大家都了解基本的子数组求和问题了吗? 这似乎有点困难,因为要选择一个子数组,你必须选择两个索引 ant,相当于 O(N**2) @VinayakSingla 直觉上似乎可以通过巧妙地增加分段树来实现,不是吗? @Filip Nguyen 有一些“子数组和问题”。所有数字都是正数吗?子数组长度是否预定义?提到的解决方案是否使用 O(1) 的额外内存? 【参考方案1】:

是否有一些 O(N log N) 预处理?

没有

在大小为 N 的数组中有 N2 个可能的子数组。您不能在小于 O(N2 的时间内生成大小为 N2 的输出sup>) 时间。

【讨论】:

我不需要使用 N log N 预处理生成 N^2 哈希表。目标是在 some 完成预处理之后,可以在最坏的 O(log N) 时间进行查询

以上是关于许多子数组求和查询的主要内容,如果未能解决你的问题,请参考以下文章

最大联通子数组求和

402. 连续子数组求和

最大子数组求和并进行条件组合覆盖测试

最大二维子数组求和~

求二维数组最大子数组

返回一个整数数组中最大子数组的和续