如何查找给定子数组的总和等于确定目标和的对数?
我尝试使用哈希表并找到sum-x和x的出现次数,x是子数组的第i个元素。
但是如何针对多个查询对其进行优化? 我们无法为每个多查询创建哈希表。
编辑:目标总和是相同的。我们继续从用户那里获取子数组的端点。
答案 0 :(得分:1)
要开始讨论,如何预先计算所有结果,然后使它们有效地访问?
预先计算所有索引对<i, j>
,其中a[i] + a[j] = sum
可以在O(n)
中离线执行,其中n
是输入数组a
的大小。
之后,您可以将预先计算的对存储在2d空间索引结构中(例如R-Tree或Quadtree)。
然后,子数组查询(start, end)
对应于具有min = (start, start)
和max = (end, end)
的2d索引上的范围查询(带有二次框)。
根据查询的范围,这应该可以在O(log m)中进行,其中m是对的总数。
答案 1 :(得分:0)
用于找到给定子数组的对数等于其目标总和的算法:
编辑1: 这是我的python解决方案。也可以使用集合来完成。
s=set()
result=set()
for item in a:
target=original_target-i
if target not in s:
s.add(i)
else:
result.add((i,target))
print(len(result))
注释集在python中作为哈希表实现,因此,除非负载系数太高,否则搜索将花费O(1)时间。因此总复杂度为O(n)