题目链接
题目描述
示例
示例1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]
提示
- 输出结果中的每个元素一定是唯一的。
-
思路
思路1:排序+双指针
将两个数组排序,维护两个指针,初始时指向两个数组头部,每次比较两个数字大小,同时还要比较是否重复。
思路2:哈希表
题目允许无序,不重复,因此我们可以使用
std::unorder_set来完成这个题目。
详细分析看基础知识。题解
思路1:排序+双指针
class Solution {public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {sort(nums1.begin(), nums1.end());sort(nums2.begin(), nums2.end());int i = 0, j = 0;vector<int> ans;while (i < (int)nums1.size() && j < (int)nums2.size()) {if (nums1[i] == nums2[j]) {if (0 == ans.size() || nums1[i] != ans.back()) {ans.emplace_back(nums1[i]);}++i;++j;} else if (nums1[i] < nums2[j]) {++i;} else {++j;}}return ans;}};
思路2:哈希表
class Solution {public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> nums(nums1.begin(), nums1.end());unordered_set<int> ans;for (int num : nums2) {if (nums.find(num) != nums.end()) {ans.insert(num);}}return vector<int>(ans.begin(), ans.end());}};
复杂度分析
思路1:排序+双指针
时间复杂度:
-
思路2:哈希表
时间复杂度:
- 空间复杂度:
