350--返回两个数组的交叉元素

自古美人都是妖i 提交于 2019-12-01 02:50:42

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 };

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!