algorithm - 在 3 个数组中的每一个中找到 3 个总和为给定值的元素

标签 algorithm sum

令 A 、 B 、 C 为 3 个数组,每个数组包含 n 个元素。求一个算法判断A中是否存在a,B中是否存在b,C中是否存在c使得a+b+ c = k.

我尝试了以下算法,但它需要 O(n²):

  1. 对所有 3 个数组进行排序。 - O(n log n)

  2. 临时数组h = k - (a+b) - O(n)

  3. 对于每个 h,在 B 中找到 c' 使得 c' = h - B[i] - O(n)

  4. 使用二进制搜索在 C 中搜索 c' - O(log n)

总计 = O(n log n) + O(n) + O(n² log n)

我们可以在 O(n log n) 中解决吗?

最佳答案

您的问题询问如何在线性算数时间内解决问题 3SUMx1,该问题在随机线性时间内显示为减少到 3SUMx3。参见 here减少。

除非你要发表一些非常大的东西,否则我怀疑你的问题会有这么快的算法,它至少和 3SUM 一样难(你也可以通过一些工作来显示相反方向的减少,也是)。

编辑:为了使上面的段落清楚,线性时间减少从3SUM证明OP的问题是$\Omega(n^{1.5})$。

关于algorithm - 在 3 个数组中的每一个中找到 3 个总和为给定值的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23967501/

相关文章:

algorithm - DDA算法困惑……!

algorithm - haskell中列表的排列

c# - 如何找到直线斜率变化的点?

algorithm - 算法复杂度的推导

php - 如何在 PHP 的 while 循环中求和每个用户的总时间

sql - 获取订单总和为1000的订单号

ruby - 删除数组中的重复元素,该元素是散列中的值及其对应的 id

mysql - SQL 查询汇总员工每周的工作时间

r - 在矩阵中按组(行名称)对列求和

python - 使用 zip 或数组对列表进行操作