题目链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/
题目如下:
解法一:
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> result;
unordered_map<int,int> umap;
for(auto num1:nums1) umap[num1]++;
for(auto num2:nums2){
if(umap[num2]!=0){
result.push_back(num2);
umap[num2]--;
}
}
return result;
}
};
解法二:
class Solution {
public:
void inter(vector<int>& nums1,vector<int>& nums2,vector<int>& result){//nums1长度大于等于nums2
unordered_map<int,int> hash;
for(auto e:nums1){
++hash[e];//放入哈希表中,并赋值其value;value值默认从0开始
}
for(auto e:nums2){
if(hash.count(e)){//返回匹配给定主键的元素的个数
result.push_back(e);//往向量vector中放入元素
--hash[e];
if(hash[e]==0){
hash.erase(e);//移除这个key
}
}
}
}
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
//tip: unordered_map
//1、插入元素
//myrecipe.insert (make_pair<string,double>("eggs",6.0));
//myrecipe["coffee"] = 10.0;
//2、查找元素
//unordered_map<string,double>::const_iterator got = myrecipe.find ("coffee");
//if ( got == myrecipe.end() ) {未找到}
//3、修改元素
//myrecipe.at("coffee") = 9.0;
//myrecipe["milk"] = 3.0;
//4、擦除元素
//myrecipe.erase(myrecipe.begin());
//myrecipe.erase("milk");
vector<int> result;
if(nums1.size()>nums2.size()) inter(nums1,nums2,result);
else inter(nums2,nums1,result);
return result;
}
};