• LeetCode 350. 两个数组的交集 II 哈希


    地址 https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/

    给定两个数组,编写一个函数来计算它们的交集。
    
     
    
    示例 1:
    
    输入:nums1 = [1,2,2,1], nums2 = [2,2]
    输出:[2,2]
    示例 2:
    
    输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出:[4,9]
     
    
    说明:
    
    输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
    我们可以不考虑输出结果的顺序。
    进阶:
    
    如果给定的数组已经排好序呢?你将如何优化你的算法?
    如果 nums1 的大小比 nums2 小很多,哪种方法更优?
    如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

    解答

    算法1
    使用哈希表记录 同时还要记录出现个数

    class Solution {
    public:
        map<int,int> mm;
        vector<int> ans;
        vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
            for(auto& e: nums1){
                mm[e]++;
            }
    
            for(auto& e:nums2){
                if(mm[e] !=0 ){
                    mm[e]--;
                    ans.push_back(e);
                }
            }
    
            return ans;
        }
    };

    扩展问题

    如果给定的数组已经排好序呢?你将如何优化你的算法?
    两个数组各设置一个指针 指向当前比较的数字 由于数组已经有序,
    一旦指向数值不相等的元素,即可不再继续检测

    如果 nums1 的大小比 nums2 小很多,哪种方法更优?
    哈希表记录nums1的数据 然后局部读取nums2的元素进行比较

    如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
    见回答2。 如果两个数组都很大,那么就是外排序方案了

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    大一训练赛20181105-二分三分分治部分
    该说命运弄人,毫不留情。
    矩阵快速幂模板
    Final Destination II -- 矩阵快速幂模板题
    UVA -580 组合数学
    NYOJ-16-矩形嵌套 记忆化搜索
    封装标签省,市,县。三级联动
    java压缩图片设置宽高
    sql分页
    常用的正则表达式@java后台
  • 原文地址:https://www.cnblogs.com/itdef/p/13292697.html
Copyright © 2020-2023  润新知