许多子数组求和查询
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) 时间进行查询以上是关于许多子数组求和查询的主要内容,如果未能解决你的问题,请参考以下文章