1、这道题和349不同之处在于,不仅要返回重复数字,还要保证重复数字出现几次返回几次
2、上一题让我接触了set容器,这道题让我接触到了unordered_map容器(要知道map和unordered_map的区别!!!),基于哈希表
区别再链接里:https://blog.csdn.net/u013130743/article/details/80794177(转载一位csdn的作者的总结)
3、map容器和unordered_map的基本用法
#include<map>;
unordered_map<int,string>map1;//第一个是键值,第二个是键值对应的存储对象(可以是string,可以是int等其他数据类型)
map1.insert(pair<int,string>)(1,"zhangsan");//三种数据插入方式
map1.insert(map<int,string>::value_type)(1,"zhangsan");
map1[1]="zhangsan";//此种插入方式可以覆盖,上面两种不行
map1.empty();//判断是否为空
map1.begin();map1.end();//迭代起始位置和结束位置
map1.size();//返回元素个数
map1.count();//返回指定元素出现的次数
map1.[key];
4、思路
定义一个ordered_map,底层是哈希表;定义一个容器vector装重复的元素
把第一个数组的元素和出现次数存放在map中,遍历第二个数组,找到一个map中对应出现的次数减去1同时把元素存放在vector中
5、代码
1 //第一次接触关联容器map 2 //上一题接触到的是set,查资料看到map和set不同之处在于,map有key值而set没有 3 4 class Solution { 5 public: 6 vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { 7 vector<int>rec; 8 unordered_map<int,int>map1; 9 for(int i=0;i<nums1.size();i++){ 10 map1[nums1[i]]+=1; 11 } 12 for(int i=0;i<nums2.size();i++){ 13 if(map1[nums2[i]]>0) { 14 rec.push_back(nums2[i]); 15 map1[nums2[i]]-=1; 16 } 17 } 18 return rec; 19 } 20 };