一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第17天,点击查看活动详情。
一、问题描述
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
题目链接:两个数组的交集 I
二、题目要求
样例 1
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
样例 2
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
解释: [4,9] 也是可通过的
考察
1.哈希
2.建议用时10~25min
三、问题分析
这一题输出结果需要判重,所以如果暴力做的话,双重for循环去重有点麻烦。
我们直接哈希处理吧。
遍历nums1哈希计数,注意这里每个数字出现的次数无论出现多少次,置为1就行,减少复杂度。
循环判断nums2的数是否存在哈希表中,存在哈希值置为0,存储数据就行。
四、编码实现
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int i;//初始化
map<int,int>m;//哈希计数
vector<int>v;//数组存储
for(i=0;i<nums1.size();i++)
m[nums1[i]]=1;//置为1
for(i=0;i<nums2.size();i++)
{
if(m[nums2[i]]>0)//哈希表出现过
{
v.push_back(nums2[i]);
m[nums2[i]]=0;//置为0
}
}
return v;//返回结果
}
};