交叉算法O(n)更好的方法?

时间:2016-09-13 00:33:38

标签: algorithm big-o intersection

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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