0%

intersection-of-two-arrays

Intersection of Two Arrays – LeetCode 349

Problem

Description

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

Example

Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].

Answer

Original

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> result;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
unsigned i = 0, j = 0;
while(i != nums1.size() && j != nums2.size()){
if(nums1[i] < nums2[j])
++i;
else if(nums1[i] > nums2[j])
++j;
else {
result.push_back(nums1[i]);
for(;i < nums1.size() - 1 && nums1[i] == nums1[i+1];++i) {}
++i;
for(;j < nums2.size() - 1 && nums2[j] == nums2[j+1];++j) {}
++j;
}
}
return result;
}
};

思路

优先进行排序方便进行比对,这样的话比对步骤就能在一次遍历中完成。时间复杂度$O(nlog{n})$,空间复杂度$O(1)$。
耗时$7$ ms,排名$71.89\%$

Better

思路

使用hashmap来记录出现过的元素,算是用空间换时间,时间复杂度$O(n)$,空间复杂度$O(n)$。
耗时$7$ ms,排名$71.89\%$

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> m(nums1.begin(), nums1.end());
vector<int> res;
for (auto a : nums2)
if (m.count(a)) {
res.push_back(a);
m.erase(a);
}
return res;
}
};