给定两个排序列表,如何查找list1中但不在list2中的元素?

时间:2016-03-19 13:19:38

标签: algorithm

我在接受采访时被问到这个问题。

例如,如果给定list1: 1,1,2,4,5,7list2: 1,3,5,8,我们应该返回list3: 2,4,7

问题需要恒定的空间,我们需要尽可能地减少时间复杂度。

1 个答案:

答案 0 :(得分:3)

我们只是同时浏览两个列表 - 使用两个"指针"进入他们 - 比较当前的两个元素。

  • 当第一个列表的当前元素小于第二个列表时,我们在结果的末尾复制第一个列表的当前元素并前进第一个指针

  • 当第一个列表的当前元素大于第二个列表时,我们前进第二个指针。

  • 当它们相等时,我们前进第一个指针。

第一个指针到达列表末尾时停止。如果第二个指针首先执行此操作,也会逐个复制list1result端的所有剩余元素,或者 - 如果这些是singly linked lists允许共享结构 - 将结果的结束指针指向第一个指针的值。

假设result是链接列表或其他具有 O(1) add-at-end操作的数据结构,这给了我们 O(n +)的复杂性m)其中 n m 是两个列表'长度。

此操作在list1 \ list2方面称为list2的设置差异list1relative set complement

使用的两个指针构成算法使用的常量辅助空间。