码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【数据结构入门_数组】 Leetcode 350. 两个数组的交集 II


    原题连接:Leetcode 350. Intersection of Two Arrays II

    Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must appear as many times as it shows in both arrays and you may return the result in any order.

    Example 1:

    Input: nums1 = [1,2,2,1], nums2 = [2,2]
    Output: [2,2]
    
    • 1
    • 2

    Example 2:

    Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    Output: [4,9]
    Explanation: [9,4] is also accepted.
    
    • 1
    • 2
    • 3

    Constraints:

    • 1 <= nums1.length, nums2.length <= 1000
    • 0 <= nums1[i], nums2[i] <= 1000

    Follow up:

    • What if the given array is already sorted? How would you optimize your algorithm?
    • What if nums1’s size is small compared to nums2’s size? Which algorithm is better?
    • What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?

    方法一:哈希表

    思路:

    用哈希表记录nums1中出现的元素的次数。然后遍历nums2中的元素,当元素在哈希表中时,添加到ans中,并且减少该元素出现的次数。

    c++代码:

    class Solution {
    public:
        vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
            // 对较短的那个数组用哈希表来记录, 空间复杂度会降低
            if(nums1.size() > nums2.size())
                return intersect(nums2, nums1);
            
            // <值, 出现次数>
            unordered_map<int, int> mp;
            vector<int> ans;
    
            // 遍历nums1, 统计元素出现的次数到哈希表
            for(auto num1 : nums1){
                mp[num1]++;
            }
    
            // 遍历nums2, 找到在出现过的元素添加到ans, 并更新哈希表 
            for(auto num2 : nums2){
                if(mp.count(num2)){
                    ans.push_back(num2);
                    --mp[num2];
                    if(mp[num2] == 0)
                        mp.erase(num2);
                }
            }
    
            return ans;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    复杂度分析:

    • 时间复杂度:O(m+n),需要遍历两个数组的所有元素
    • 空间复杂度:O(min(m+n)),哈希表的长度是两个数组中长度较小的那一个
  • 相关阅读:
    如何在CentOS系统中管理Docker容器
    Nature Microbiology|益生菌的菌株特异性影响驱动早产儿肠道微生物组的发展
    JSP EL表达式的基本语法及运算符的优先级(一览表)
    计算机网络概念入门(十一)
    【uniapp】确认弹出框,选择确定和取消
    免费、丰富、便捷的资源论坛——Yiove论坛,包括但不限于阿里云盘、夸克云盘、迅雷云盘等等
    翻越相机标定的奥林匹斯
    嵌入式linux(imx6ull)下RS485接口配置
    3.5 属性绑定
    吴恩达卷积神经网络 笔记,吴恩达 深度神经网络
  • 原文地址:https://blog.csdn.net/cwtnice/article/details/125410226
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号