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; } };
|