码农知识堂 - 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)),哈希表的长度是两个数组中长度较小的那一个
  • 相关阅读:
    111、感同身受,并不是那么容易
    微信小程序实现点击一块区域,出现一块区域按钮。
    60 个前端 Web 开发流行语你都知道哪些?
    Jmeter使用及压测
    【科学文献计量】将Web of Science中的非核心合集的纯文本格式导入到endnote的文献数据转化为pandas中的DataFrame类型数据
    模式分类识别 | Python实现基于Xboost的股票走势识别预测
    let’s go——2022年读书活动招募书(第1期)
    java标识符命名规范之驼峰命名法
    LeetCode 75 - 01 : 最小面积矩形
    TiDB整体架构详解TiDB核心特性
  • 原文地址:https://blog.csdn.net/cwtnice/article/details/125410226
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号