• LeetCode349. 两个数组的交集


    题目

    给定两个数组,编写一个函数来计算它们的交集。

    分析

    数组元素值可以很大,所以不适合直接开数组进行哈希,这里要学习另一种哈希方式:集合

    集合有三种,区别见下面代码随想录的Carl大佬的表格,总结的很清晰。

     由于题目中明确了不考虑元素的是否有序,所以我们可以使用unordered_set,这样查删效率会高些。

    代码

     1 class Solution {
     2 public:
     3     
     4     vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
     5        unordered_set<int>n1(nums1.begin(),nums1.end());
     6        vector<int>res;
     7     //    unordered_set<int>res;
     8     //    for(int i = 0;i < nums2.size();i++){
     9     //        if(n1.find(nums2[i]) != n1.end())
    10     //             res.insert(nums2[i]);
    11     //    }
    12     //    return vector<int>(res.begin(),res.end());
    13 
    14        for(auto& num : nums2){
    15            if(n1.find(num) != n1.end()){
    16                res.push_back(num);
    17                n1.erase(num);
    18            }
    19        }
    20        return res;
    21     }
    22 };

    这里先将nums1转换为unordered_set,去重,然后再遍历nums2找到nums1公共元素加入res

    说明:

    1. 14行为C++11特性,nums2的每个元素赋值给num。至于为什么加取地址符,是因为无论时

    整形还是迭代器类型,使用引用类型可以避免多余的拷贝步骤

    2. 15行,find如果没有找到该值,则返回一个容器尾部的迭代器

  • 相关阅读:
    JQuery FlexiGrid的asp.net完美解决方案:dotNetFlexGrid.Net原生的异步表格控件 简介和应用效果截图
    利用View静态画图
    Context部分译(http://developer.android.com/reference/android/content/Context.html))
    java 利用Scanner解析逗号字符串
    Canvas
    SurfaceView部分译
    handler
    Centos7上安装jdk8
    Opera 使用迅雷下载
    fopen()
  • 原文地址:https://www.cnblogs.com/fresh-coder/p/14289567.html
Copyright © 2020-2023  润新知