【发布时间】: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) 的额外内存?
标签: arrays algorithm performance time-complexity sub-array