zoukankan      html  css  js  c++  java
  • 350--返回两个数组的交叉元素

    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 };
  • 相关阅读:
    来换网心得总结
    关于项目来换网
    数据库设计源代码
    自我介绍
    WC项目
    关于《现代软件工程》此书的疑问
    Swift基础语法(常量变量、数据类型、元组、可选、断言等)
    grunt快速学习
    Swift语言简介
    Swift简单入门教程:30分钟玩转Swift
  • 原文地址:https://www.cnblogs.com/hehesunshine/p/11649437.html
Copyright © 2011-2022 走看看