【发布时间】:2016-10-13 20:16:49
【问题描述】:
给定两个集合 A 和 B,我如何才能找到仅存在于 A 中、同时存在于 A 和 B 中以及仅存在于 B 中的元素,在线性时间内,并且不使用哈希表。
有人告诉我做如下事情, 对于集合 B 中的每个元素,尝试将其添加到集合 A。如果可以添加,则表示该元素不存在于集合 A,因此,将其添加到集合 B 独有的 元素列表。但是,如果您无法添加它,则意味着集合 A 中已经存在这样的元素,因此,将其添加到集合 A 和集合 B 共有的 元素列表中.
但是,使用这种方法,我如何才能找到仅存在于集合 A 中的元素?
PS:我在一次采访中被问到这个问题,我给了他多种解决方案,如下所示。但是,面试官想要上面的解决方案。
- 使用 O(n^2) 循环对
- 在 O(n) 中使用哈希表
- 对 O(n.logn) 中的集合进行排序并比较两个集合中的元素,并根据值递增。
【问题讨论】:
-
"尝试将其添加到集合 A" 是 O(n),除非该集合是哈希表或其他具有高效查找的结构;因此尝试将 B 的所有元素添加到 A 是 O(n2)。
-
@MarkoTopolnik:是的,必须使用散列或等效方法来实现集合,以便添加元素 O(1)。我想没关系,只是不允许使用额外的 hashmap。
-
如果集合是哈希表,您只需使用
contains而不要尝试实际添加元素。那么就很简单了。 -
@MarkoTopolnik,如标题所述,我正在寻找没有哈希表的解决方案。
-
不,作业说“给定两组……”。如果不是某种特定的数据结构,就不能“给定一个集合”。那么,它是什么?数组?一个链表?哈希表?
标签: java algorithm sorting set hashtable