LeetCode:349
https://leetcode-cn.com/problems/intersection-of-two-arrays/
题目
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
题解:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
// 建立unordered_set存储nums1数组
unordered_set<int> nums1_set(nums1.begin(), nums1.end());
vector<int> ans;
for(auto num : nums2)
{
if(nums1_set.erase(num))
ans.push_back(num);
}
return ans;
}
};
LeetCode:350
https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]
说明:
输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
我们可以不考虑输出结果的顺序。
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> ans;
// 创建一个哈希表
unordered_map<int, int> m;
// 在哈希表中存储数组nums1
for(auto num : nums1)
m[num]++;
// 在数组nums2中查找
for(auto num : nums2)
{
// 在哈希表(nums1)中存在 且 个数大于等于1
if(m.count(num) != 0 && m[num])
{
ans.push_back(num);
m[num]--;
}
}
return ans;
}
};