algorithm - 交集算法 O(n) 更好的方法?

标签 algorithm big-o intersection

令 S1 和 S2 为两组整数,使得 |S1| = |S2| = n。

所有整数都是从域 [1, 20n] 中获得的。给出一个算法在 O(n) 最坏情况时间内报告 S1 ∩ S2 中的所有整数。

我很困惑,他们为什么给我域名? 我知道我可以在 O(n) + O(n) 时间内对两个列表进行计数排序,然后使用双指针方法在 O(n) 时间内比较元素。

我觉得我好像错过了什么或者有更好的方法?

最佳答案

您的方法可行,但我认为这是另一种比排序和迭代更简单的方法。它遵循计数排序或基数排序的想法,但略有不同。

  1. 创建一个大小为 20n 的数组。
  2. 遍历您的第一组和第二组并递增每个与您在刚刚创建的数组中的值相匹配的索引。
  3. 遍历您创建的数组并打印出其中值为 2 的所有索引。

这是 O(n)。

关于algorithm - 交集算法 O(n) 更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460590/

相关文章:

python - 按列对两个不同维度的 numpy 数组进行交集

r - 在 R 中绘制折线图的交点

algorithm - 通过不直接处理它的中间方法传递相同的变量

algorithm - Rust 有没有计算乘积之和的好方法?

c++ - 如何使用 C++ opencv 2.4.10 查找视频的帧率?

big-o - 最坏情况快速排序的大O时间复杂度?

php - 如何根据另一个值设置一个值的符号

algorithm - Big(O) 符号 - 哪个是正确的

python - 如何计算嵌套 'for' 循环的时间复杂度?

c++ - 具有重复值的 Set_Intersection