LeetCode-350. 两个数组的交集 II

news2024/11/16 19:04:38

目录

    • 方法一:哈希表
    • 方法二:排序 + 双指针

题目来源
350. 两个数组的交集 II

方法一:哈希表

由于同一个数字在两个数组中都可能出现多次,因此需要用哈希表存储每个数字出现的次数。对于一个数字,其在交集中出现的次数等于该数字在两个数组中出现次数的最小值。

首先遍历第一个数组,并在哈希表中记录第一个数组中的每个数字以及对应出现的次数,然后遍历第二个数组,对于第二个数组中的每个数字,如果在哈希表中存在这个数字,则将该数字添加到答案,并减少哈希表中该数字出现的次数。

为了降低空间复杂度,首先遍历较短的数组并在哈希表中记录每个数字以及对应出现的次数,然后遍历较长的数组得到交集。
在这里插入图片描述
时间复杂度:O(m+n)
空间复杂度:O(min⁡(m,n))

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        // 挑选出两个数组找个短的那个
        if (nums1.length > nums2.length) {
            return intersect(nums2, nums1);
        }
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int num : nums1) {
            // map.getOrDefault : 存在这个数就返回,不存在就返回默认值
            int count = map.getOrDefault(num, 0) + 1;
            map.put(num, count);
        }
        // 开辟一块内存空间用来存放两个数组的交集
        int[] intersection = new int[nums1.length];
        int index = 0;
        for (int num : nums2) {
            // num1中不存在这个数就在map中添加num=0
            int count = map.getOrDefault(num, 0);
            if (count > 0) {
                intersection[index++] = num;
                count--;
                // 如果还大于0
                if (count > 0) {
                    // 再次添加进去,覆盖之前那个key
                    map.put(num, count);
                } else {
                    // 不大于0移除这个数
                    map.remove(num);
                }
            }
        }
        return Arrays.copyOfRange(intersection,0,index);
    }
}

map.getOrDefault(Object key, V defaultValue);
①map中存在key,value返回key对应的value即可。
②map中不存在key,value则返回defaultValue(默认值)。

在这里插入图片描述

方法二:排序 + 双指针

创建一个指针 i 指向 nums1 数组首位,指针 j 指向nums2 数组首位。
创建一个临时栈,用于存放结果集。
开始比较指针 i 和指针 j 的值大小,若两个值不等,则数字小的指针,往右移一位。
若指针 i 和指针 j 的值相等,则将交集压入栈。
若 nums 或 nums2 有一方遍历结束,代表另一方的剩余值,都是唯一存在,且不会与之产生交集的。
时间复杂度:O(mlog⁡m+nlog⁡n)
空间复杂度:O(min⁡(m,n))

在这里插入图片描述

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int[] arr = new int[Math.min(nums1.length, nums2.length)];
        int l = 0;
        int j = 0;
        int index = 0;
        while (l < nums1.length && j < nums2.length){
            if (nums1[l] < nums2[j]){
                l++;
            }else if (nums1[l] > nums2[j]){
                j++;
            }else {
                arr[index] = nums1[l];
                l++;
                j++;
                index++;
            }
        }
        return Arrays.copyOfRange(arr,0,index);
    }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/195762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

看板:自我管理的高效工具!

当在团队中在做看板管理的时候&#xff0c;我们一直强调的是看板中的工作项需要承载价值。通过拉动承载价值的工作项在看板中的流动&#xff0c;我们可以清晰地看到产品价值从需求端流动到交付端的进展及状态。也正因如此&#xff0c;我们需要及时识别看板中没有价值的工作项并…

解锁极狐GitLab 自动化功能:Webhook 触发 Pipeline 与计划流水线

本文来自&#xff1a; 杨洪丽 极狐GitLab 高级网站可靠性工程师(SRE) 只使用极狐GitLab 存放代码? 那你就 OUT 啦&#xff01; 如果你也遇到了如图 A / B / C / D 各位同学的烦恼&#xff0c;不要错过这篇能够让你日常工作更高效的内容。 使用极狐GitLab Webhook 触发 Pipelin…

JSON格式店铺商品列表api

对于做竟店分析来说&#xff0c;首先要知道店铺有哪些商品&#xff0c;店铺宝贝列表则提供了这样的入口&#xff0c;可以查看该店铺的所有宝贝&#xff0c;也可以通过关键词全局搜索来获取店铺宝贝&#xff0c;但搜索会夹带这很多推荐的结果在里面&#xff0c;会比较混乱。 淘宝…

Python语言零基础入门教程(二)

Python 变量类型 变量是存储在内存中的值&#xff0c;这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型&#xff0c;解释器会分配指定内存&#xff0c;并决定什么数据可以被存储在内存中。 因此&#xff0c;变量可以指定不同的数据类型&#xff0c;这些变…

2023年不良资产项目尽调研究报告

第一章 不良资产的尽调方法 1.1 档案查阅 阅档是尽职调查工作的第一步也是最基础的环节。阅档过程是对资产进行了解的过程&#xff0c;阅档需要判断债权是否具有瑕疵&#xff0c;担保是否继续有效&#xff0c;初步了解各类资产所含的法律关系、状态、权益等。 通过查阅项目卷…

AI人工智能方向

AI人工智能方向 图像CV 图像处理&#xff0c;犬类识别&#xff0c;场景文字识别&#xff0c;人脸算法&#xff0c;图像增强&#xff0c;计算机影像&#xff0c;车型识别&#xff0c;物体检测&#xff0c;黄色图片识别&#xff0c;目标检测API文档Logo检测使用手册&#xff0c…

【数字孪生百科】每周认识一个数字孪生要素 —— 气泡图(Bubble Chart)

简介气泡图&#xff08;Bubble Chart&#xff09;是一种多变量的图片&#xff0c;是散点图的一种变体&#xff0c;气泡图其实是在散点图的基础上进行升级改造的&#xff0c;在原有的以横纵坐标为变量的基础上&#xff0c;引入第三个变量&#xff0c;用气泡的大小来表示&#xf…

Lesson 5. 分类模型决策边界与模型评估指标(上)

文章目录一、决策边界&#xff08;Decision Boundary&#xff09;基本概念与用途1. 决策边界基本概念与绘制方法2. 通过决策边界观察模型性能3. 逻辑回归决策边界与模型可解释性二、逻辑回归决策边界绘制与使用方法1. 定义决策边界绘制函数2. 决策边界绘制3. 逻辑回归决策边界与…

3、Maven——Maven创建java web工程,IDEA更改XML版本、Maven Search插件的安装与使用

目录 一、Maven创建java web工程 二、Maven创建java web项目的结构 1、添加项目目录 2、web.xml配置处理报错 三、IDEA更改XML版本 四、Maven Search插件的安装与使用 1、Maven Search的安装 2、Maven Search的使用 一、Maven创建java web工程 创建Empty Project空工程…

【U8+】用友U8试算UFO报表后,显示#公式错误;并且函数向导中没有用友账务函数。

【问题描述】 使用用友U816.1软件的时候&#xff0c; 打开UFO报表&#xff0c;计算资产负债表后&#xff0c;显示【#公式错误】。 【排查过程】 开始以为是选择的报表模板文件有问题&#xff0c;将其文件发送到其他U8客户端电脑上&#xff0c;操作正常。 那么可以认为报表模板…

java vector 类

目录 一.前言 1.1vector简介 1.1.1java Collection下的子类图 1.1..2 介绍 1.1.3Vector类详细规则 1.2Vector与ArrayList的区别 二.Vector的方法 三.代码示例(demo) 一.前言 1.1vector简介 1.1.1java Collection下的子类图 1.1..2 介绍 Vector类 是在 java 中可以实现…

从0到1一步一步玩转openEuler--02 openEuler操作系统的安装

2 openEuler操作系统的安装 2.1 openEuler操作系统的安装流程 2.2 openEuler操作系统的安装详细步骤 本次介绍 openEuler 22.03-LTS 基于 X86 架构的安装。 2.2.1 下载地址 官网下载地址&#xff1a;https://www.openeuler.org/zh/download/ 根据你的实际需求选择适合架构…

提取游戏《碧蓝档案》(Blue Archive)内的素材

实际上你游素材直接去根目录下找就行&#xff0c;唯一需要处理的可能就是bgm&#xff08;格式均为ogg&#xff09;&#xff0c;用格式工厂或者你下个VLC都行。 使用方法&#xff1a;一根usb数据线&#xff0c;一台电脑&#xff0c;一部手机 目录 游戏目录位置 附录 更新&a…

SpringBean生命周期

IOC 控制反转 既然叫反转&#xff0c;肯定就有正转&#xff0c;正转其实就是对象去找实例&#xff0c;而反转就反过来了嘛&#xff0c;让实例来找对象通过容器&#xff1b; DI 依赖注入 通过容器注入了bean对象&#xff0c;而且这个过程是自动化的&#xff0c;也就是说容器…

计算机视觉

什么是计算机视觉&#xff1f; 计算机视觉是人工智能&#xff08;AI&#xff09;的一个领域&#xff0c;它使计算机和系统能够从数字图像、视频和其他视觉输入中提取有意义的信息&#xff0c;并根据该信息采取行动或提出建议。如果AI使计算机能够思考&#xff0c;那么计算机视…

webservice接口与HTTP接口学习笔记一、webservice 的概念

webservice接口与HTTP接口学习笔记一、webservice 的概念 目录&#xff1a;导读 一、webservice 的概念 二、webservice接口测试 三、HTTP接口 四、HTTP协议结构 一、webservice 的概念 Web 是使应用程序可以与平台和编程语言无关的方式进行相互通信的一项技术。Web 服务…

关于获取两数相除求百分比,浮点数或整数-相乘,相除-但余数需保留小数点不能有doble继承,应该使用BigDecimal进行四舍五入

int total 3; int finished 2; 类似于这种两数向除---需要将其转化为BigDecimal&#xff0c;利用其函数的方法相除&#xff0c;并用 BigDecimal类型接收结果。 int total 3 int finished 2; BigDecimal result BigDecimal.valueOf(finished).divide(BigDecimal.valueO…

function_url构造函数

目录URL构造函数作用语法返回值构造函数的特定方法URL.createObjectURLURL.revokeObjectURL应用[1]获取url携带参数[2]创建本地url[3]为每个文件生成一个uuidURL构造函数 作用 创建并返回指定url对象 语法 new URL(url,[base])url(必填): 若是rl 是相对 URL&#xff0c;则会…

操作系统简介

坚持看完&#xff0c;结尾有思维导图总结 这里写目录标题概述冯诺依曼体系结构操作系统简介总结概述 本文先介绍冯诺依曼体系结构&#xff0c;并且举了几个例子进行理解&#xff0c;随后粗略介绍操作系统功能&#xff0c;并且为进程的理解打下基础 冯诺依曼体系结构 首先上一…

Python入门第一课——Python起步安装、Sublime Text安装教程,环境配置

Python入门第一课——Python起步安装、Sublime Text文本编辑器1 Python简介2 Python安装2.1 下载安装包2.2 开始安装Python3 Python起步——安装编辑器Sublime Text3.1 Sublime Text简介3.2 Sublime Text安装安装包打开文件创建快捷方式3.3 打开sublime text3.4 第一个程序&…