给出5个大小为n的数组:a,b,c,d,e。有多少(i,j,k,g,h),
a(i)+ b(j)+ c(k)+ d(g)+ e(h)= 0?
这个问题是否可以通过比O(n ^ 2 + n ^ 3)更好的复杂度来解决(使用哈希映射)?
答案 0 :(得分:3)
如果数组包含有限大小的整数(即在-u到u范围内),那么您可以在O(n+ulogu)
时间内使用快速傅里叶变换将每个集合的直方图卷积在一起来解决此问题。
例如,集合a=[-1,2,2,2,2,3]
将由具有值的直方图表示:
ha[-1] = 1
ha[2] = 4
ha[3] = 1
在将所有直方图与FFT一起卷积之后,得到的直方图将包含条目,其中每个bin的值告诉您组合数字以获得每个可能总数的方式的数量。要找到总共0的问题答案,您需要做的就是读取bin 0的直方图值。