arrays - 判断n个整数数组中是否存在A+B=C

标签 arrays algorithm integer linear-algebra

这是我的一个 friend 收到的作业(算法和数据结构类)。他问我这件事。但是,我无法解决它,最近几天一直在思考这个问题。

在[0, 231-1]范围内有n个随机整数(可能有重复,判断这3个数是否满足 A + B = C

我首先想出了一个 O(n2log n) 的朴素算法。 然后我想出了一个 O(n2) 的算法。这是伪代码:

sort(a); // non-descending
for (i = 0; i < n; i++) {
  j = i; k = i + 1;
  while (j < n && k < n) {
    if (a[i] + a[j] == a[k])
      return true;
    else if (a[i] + a[k] < a[j])
      k++;
    else
      j++;
  }
}
return false;

但是,问题指出 1 <n <= 106。我认为 O(n2) 太慢了。我的解决方案没有利用随机性。但是,我不确定这是否是问题的重要部分。

最佳答案

一般问题是3SUM-Hard并且是否存在比二次算法更好的问题是开放的。

因此,如果您需要更快的算法,您可能需要利用它们是 32 位这一事实。

关于arrays - 判断n个整数数组中是否存在A+B=C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842921/

相关文章:

c++ - std::array 的内联初始化有什么问题?

algorithm - 圆形物体的碰撞

algorithm - 后缀树中的最大和最小边数

c++ - 整数除法

java - 错误: no suitable constructor found for JsonArrayRequest

c++ - 如何创建指针数组?

Javascript 解析 int64

检查整数是否适合 64 位的 Pythonic 方法

c++ - 子数组是否保证线性分配?

algorithm - 分析递归算法