【LeetCode】#349 Intersection of Two Arrays

Given two arrays, write a function to compute their intersection.

Example:
Given nudms1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].

Note:

1.Each element in the result must be unique.
2.The result can be in any order.

题目大意,给出两个数组,要求求出两个数组的交集。并且交集结果中的元素是不重复的。

(1)首先将一个数组nums1存储在一个set容器中,随后遍历第二个数组nums2,查找其元素在set容器中是否存在相同的元素。若存在,则是交集的一部分并将相同元素insert入第二个set中(解决了元素唯一性的问题)。再将set转存到vector容器中。

解法一

(2)解法一使用了两个set容器,第一个set用来存储第一个数组nums1(消除了数组中的重复元素);第二个set用来存储相同数字的元素(也消除了重复的元素)。下面这个解法只使用了一个set容器:首先如解法一讲nums1存储在set容器中,判断nums2中的元素是否有与在set中相同的元素,若有,则push_back到vector中,同时在set中删除该元素(保证了数据的唯一性)。

(3)使用哈希表unordered_map。将数组nums1存储到哈希表中,为了实现类似set元素的唯一性,此处要加一个判断(如果该元素对应的值为0,则置为1);然后遍历nums2,若nums2的元素在哈希表中(元素对应的值为1),则push_back入vector中,并且递减其元素对应的值(保证了元素的唯一性)。

解法三

附:
(1)容器set的特性及用法,set中的元素是唯一的。
(2)哈希表unordered_map的特性及用法,因为unordered_map容器中的元素不具有唯一性,即同一个key可能出现多次。所以此题需要加一条判断语句,实现其类似set容器的特性。

发表评论

电子邮件地址不会被公开。 必填项已用*标注