Leetcode——350. 两个数组的交集 II

2023-11-19

题目

给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。

输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

解题方法

两个数组的交集就是看有多少个相同的数,例如第一组例子,nums1中有两个2,同样的nums2中也有两个2,这就是两个数组的交集,毕竟数组里面可以存在相同值得元素。

哈希表

对于哈希表,首先建立一个key-value的键值对的关系,在哈希表内键是不可以重复的,所以把key设置为数组的元素的值,value对应值的个数,例如数组中1的个数有两个,键值对就是<1,2>。
遍历第一个数组,并把元素全部添加到哈希表内。然后对第二个数组进行遍历,当有元素值相同时,则添加到额外创建的结果数组当中,并把元素个数减一,直至该元素个数为零,之后再有相同元素的值,则不添加到结果数组中。
例如,遍历第二个数组中第一个1时,判断哈希表内是否存在key为1的,存在,就把对应的value减一,表示与第一个数组里面的一个1与第二个数组的一个1重合。当再次向第二个数组的第二个1遍历时,再去哈希表内对应的key的value查看第一个数组内部是否还有1的个数与之对应,如果此时value为零则不添加,否之,添加。直至对第二个数组遍历完成。

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        int[] res = new int[nums1.length];

        Map<Integer, Integer> hashmap = new HashMap<>();

        for (int num : nums1) {
            if (hashmap.containsKey(num)){
                int temp = hashmap.get(num);
                hashmap.put(num, temp+1);
            }else {
                hashmap.put(num, 1);
            }
        }
        int count = 0;//记录重合的元素
        for(int num : nums2){
            if (hashmap.containsKey(num) && (hashmap.get(num) > 0)){
                res[count] = num;
                count++;
                int temp = hashmap.get(num);
                hashmap.put(num, temp-1);
            }
        }
        return Arrays.copyOfRange(res,0,count);//对数组的一个操作,即把对应数组的对应范围的元素复制到新的数组内,返回的是一个数组
    }
}

排序 + 双指针

这个方法得思路就是对数组从小到大或者从大到小排序,本题解题代码从小到大排序,然后同时对数组遍历,并判断是否相等,当俩个指针对应的数相等,添加到结果数组内,并指针后移;当不同时,根据你得数组排序来决定哪一个指针后移,当从小到大排序时,对应值小的后移;反之,大的后移。最后返回对应数组即可。

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        int[] res = new int[nums1.length];

        Arrays.sort(nums1);
        Arrays.sort(nums2);
        
        int temp1 = 0, temp2 = 0, count = 0;
        while((temp1 < nums1.length) && (temp2 < nums2.length)){
            if(nums1[temp1] == nums2[temp2]){
                res[count] = nums1[temp1];
                count++;
                temp1++;
                temp2++;
            }else if (nums1[temp1] > nums2[temp2]){
                temp2++;
            }else{
                temp1++;
            }
        }
        return Arrays.copyOfRange(res,0,count);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode——350. 两个数组的交集 II 的相关文章

随机推荐

  • vue3.0项目报错:删除node包重新装报错

    前言 vue3 0的项目删除node包以后重新装项目 会报错 vue loader v16 找不到 安装以后下次再删包 再装会报错webpack的问题 解决办法 在新建项目后 打开pack json文件 找到 devDependencies
  • 【积累】Element-ui,el-dialog里面嵌入el-form,resetFields失效问题

    记一次element ui el dialog里面嵌入el form 使用resetFields方法初始化表单失效 问题记录 前提 当el form在一个el dialog中 dialog显示与否绑定变量 showDialog ref 为
  • 用DC-DC 升压降压以及产生负电压的原理及应用

    文章目录 前言 一 Boost和Buck电路 二 实际使用 1 DC DC芯片 2 DC DC芯片产生负电压 前言 在设计电源电路时经常会用到升压降压和负电压等电路 博主结合理论知识和实际应用加上自己理解 分享这篇文章 一 Boost和Bu
  • 设置无线路由器与有线网络在同一网段

    公司有两台路由器 一台连接internet的大路由器 一台无线路由器 两台路由器不在同一网段 所以无法实现互联互通 在一个局域网中很不方便 原设置 无线路由器的WAN口连接到大路由器上 插网线 无线路由器的WAN IP设置与大路由器一个网段
  • 【微信小程序】wx.request出现undefined

    偶现 天啦噜 一直困惑了很久的bug终于找到原因了 示例代码如下 wx request sucess function res if res statusCode 200 res data status 200 do something e
  • csdn中使用KaTeX给公式编号

    说明 csdn用的公式编辑器是Katex 并不是LaTeX 两者语法有些区别 比如LaTeX中的公式编号 begin equation 在KateX中就会解析错误 katex中 给公式编号用 tag 1 的形式 例如 E mc 2 tag
  • 【Threejs效果:挖空几何体】ThreeBSP实现墙体挖洞

    1 效果如下 2 代码如下 基本思路 1 创建两个mesh 一个墙体 一个窗户 2 然后取墙体和窗户的差集 将差集转换成几何体 3 根据几何体新建mesh 并贴纹理 依赖库有三个 import as THREE from three imp
  • CPU系统级验证——概览索引

    1 RISC V CPU核指令集验证分析 1 wujian100 1 SoC核分析 无剑100实际上是一款低功耗SoC 采用的CPU核是E902 core通过AHB总线与Icache相连 2 验证环境分析 通过 readmemh test
  • Nginx的alias的用法及与root的区别(转)

    http nginx org en docs http ngx http core module html alias http nginx org en docs http ngx http core module html root 以
  • Anaconda创建虚拟环境出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.ts解决办法

    使用Anaconda创建一个新的环境 执行 conda create n scrapyEnv python 3 6 结果出现了 CondaHTTPError HTTP 000 CONNECTION FAILED for url https
  • 电脑上有哪些好用的视频剪辑软件

    http www 360doc com content 18 0712 08 55889173 769741943 shtml 可以说 现在视频正日益成为营销和社交媒体的一个组成部分 这就是为什么会有视频编辑越来越火的原因 这已随着视频在当
  • matlab 从点云中移除隐藏点

    目录 一 功能概述 1 算法概述 2 主要函数 二 代码实现 三 结果展示 四 参考链接 一 功能概述 1 算法概述 该函数使用如下步骤从指定的视点确定点云中的可见点 1 将点云与中心位于视点的坐标系相关联 2 使用球形投影进行反演 创建一
  • nginx配置vue(history模式)

    问题的原因 项目本来使用 hash 的路由模式来部署 因为需求关系 现在要改成 history 的模式来部署了 路径上不要有 号 第一步 修改项目的 router index js 的配置 const router new VueRoute
  • modbus总线协议(一)modbus rtu

    一 介绍 Modbus协议由Modicon公司开发出来 现在Modbus是工业领域全球最流行的协议 硬件支持RS 232 RS 422 RS 485和以太网设备 应用在PLC DCS 智能仪表等工控领域 图片来源于网络 二 modbus协议
  • template 的使用

    插件介绍 template 是一个高性能的JavaScript模板引擎 插件特性 1 性能卓越 执行速度快 mustache 与 tmpl 的20多倍 2 支持运行时调试 可精准定位异常模板所在语句 3 对 NodeJS Express 有
  • Java NIO Files类读取文件流方式详解

    Java NIO Files类读取文件流方式详解 Files类原理概述 java nio file Files是Java标准库提供的一个工具类 用于操作文件和目录 它提供了一系列静态方法 可以用于创建 复制 删除 移动 重命名 读取 写入文
  • Kaggle研究16,000+数据科学从业者并公开数据 !(附数据集下载)

    来源 机器之心 本文长度为2540字 建议阅读5分钟 本文整理Kaggle对人工智能领域超过16 000受调查者的调查数据结果 Kaggle 是互联网上最著名的数据科学竞赛平台之一 今年3月8日 这家机构被谷歌收购 6月6日又宣布用户数量超
  • 二进制.bin文件切分、bintopng、write

    import numpy as np import cv2 import os Your file path file dep open r E data 3DHuman Detection withoutlabel 20180715 50
  • 小白入门机器学习深度学习实战教程

    课程介绍 机器学习深度学习 实战训练营开课了 哔哩哔哩 bilibili 机器学习深度学习 实战训练营开课了
  • Leetcode——350. 两个数组的交集 II

    题目 给你两个整数数组 nums1 和 nums2 请你以数组形式返回两数组的交集 返回结果中每个元素出现的次数 应与元素在两个数组中都出现的次数一致 如果出现次数不一致 则考虑取较小值 可以不考虑输出结果的顺序 输入 nums1 1 2