JavaScript实现两个数组的交集


Posted in Javascript onMarch 25, 2022

两个数组的交集 I

给定两个数组 ​​nums1​​​ 和 ​​nums2​​ ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例 1:

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

示例 2:

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的

注:

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

解题思路:

如果两个数组是有序的,则可以使用双指针的方法得到两个数组的交集。

首先对两个数组进行排序,然后使用两个指针遍历两个数组。可以预见的是加入答案的数组的元素一定是递增的,为了保证加入元素的唯一性,我们需要额外记录变量 pre 表示上一次加入答案数组的元素。

初始时,两个指针分别指向两个数组的头部。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,且该数字不等于 pre ,将该数字添加到答案并更新 pre 变量,同时将两个指针都右移一位。当至少有一个指针超出数组范围时,遍历结束。

JavaScript 实现:

var intersection = function(nums1, nums2) {
nums1.sort((x, y) => x - y);
nums2.sort((x, y) => x - y);
const length1 = nums1.length, length2 = nums2.length;
let index1 = 0, index2 = 0;
const intersection = [];
while (index1 < length1 && index2 < length2) {
const num1 = nums1[index1], num2 = nums2[index2];
if (num1 === num2) {
// 保证加入元素的唯一性
if (!intersection.length || num1 !== intersection[intersection.length - 1]) {
intersection.push(num1);
}
index1++;
index2++;
} else if (num1 < num2) {
index1++;
} else {
index2++;
}
}
return intersection;
};

两个数组的交集 II

与 I 相通的类似的一道题:

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

示例 1:

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

示例 2:

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

解题思路:

如果两个数组是有序的,则可以使用双指针的方法得到两个数组的交集。

首先对两个数组进行排序,然后使用两个指针遍历两个数组。

初始时,两个指针分别指向两个数组的头部。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,将该数字添加到答案,并将两个指针都右移一位。当至少有一个指针超出数组范围时,遍历结束。

JavaScript 实现:

/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersect = function(nums1, nums2) {
//将两个数组从小到大排序
nums1.sort((a,b) => a-b)
nums2.sort((a,b) => a-b)
let res = []
let key1 = 0, key2 = 0, index = 0
//在两个指针不达边界的前提下不断推进
while(key1 < nums1.length && key2 < nums2.length){
//判断nums1[key1]与nums2[key2]的大小,分出大于小于等于三种情况
if(nums1[key1] < nums2[key2]) key1++
else if(nums1[key1] > nums2[key2]) key2++
else{
res[index++] = nums1[key1]
key1++
key2++
}
}
return res
};

到此这篇关于JavaScript实现两个数组的交集 的文章就介绍到这了,更多相关JS数组交集 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
为指定元素增加样式的js代码
Dec 09 Javascript
js异步加载的三种解决方案
Mar 04 Javascript
javascript动态判断html元素并执行不同的操作
Jun 16 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
Feb 18 Javascript
vue.js学习之递归组件
Dec 13 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
Mar 06 Javascript
详解JS函数stack size计算方法
Jun 18 Javascript
javascript实现简易聊天室
Jul 12 Javascript
解析原来浏览器原生支持JS Base64编码解码
Aug 12 Javascript
vue子传父关于.sync与$emit的实现
Nov 05 Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
关于对TypeScript泛型参数的默认值理解
Jul 15 Javascript
angular4实现带搜索的下拉框
使用Canvas绘制一个游戏人物属性图
【js设计模式】SOLID五大设计原则
什么是SOLID
Vue3中toRef与toRefs的区别
Mar 24 #Vue.js
Javascript的promise,async和await的区别详解
Mar 24 #Javascript
一起来看看Vue的核心原理剖析
Mar 24 #Vue.js
You might like
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
漂亮的提示信息(带箭头)
2007/03/21 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
python批量复制图片到另一个文件夹
2018/09/17 Python
Python面向对象程序设计类的封装与继承用法示例
2019/04/12 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
python同时替换多个字符串方法示例
2019/09/17 Python
python实现从ftp服务器下载文件
2020/03/03 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
如何理解python中数字列表
2020/05/29 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
建筑毕业生自我鉴定
2013/10/18 职场文书
反邪教标语
2014/06/23 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
债务纠纷起诉书
2015/05/20 职场文书
中秋节晚会开场白
2015/05/29 职场文书