【问题标题】:5 numbers such that their sum equals 05个数字,它们的总和等于0
【发布时间】:2014-10-17 00:32:41
【问题描述】:

给定 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) 更好的复杂度来解决(使用哈希图)?

【问题讨论】:

  • 假设您指的是整数并且正/负数的分布是相等的(在所有 5 个数组中) - 我看不出它如何以比 @987654321 更好的时间复杂度来完成@
  • 数组只包含唯一的数字还是可以包含重复的?
  • 它们可以包含重复项
  • @curiosu 可以删除数组中的重复项,因为我们可能最多需要其中一个。
  • 我想如果他有 a = [-2, -2] b = [-1, -1] c = [0, 0] d = [1, 1] 和 e = [ 2, 2]“多少”的答案将是 32,而不是 1。 ( 0-0-0-0-0, ..., 0-0-0-0-1 ,..., 1-1 -1-1-1 )

标签: algorithm search


【解决方案1】:

如果数组包含大小有限的整数(即在 -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 的直方图值。

【讨论】:

  • 你能补充一些细节和直觉吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多