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 相关文章推荐
利用javascript查看html源文件
Nov 08 Javascript
extjs grid取到数据而不显示的解决
Dec 29 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
jquery选择器-根据多个属性选择示例代码
Oct 21 Javascript
jquery动态改变form属性提交表单
Jun 03 Javascript
推荐4个原生javascript常用的函数
Jan 12 Javascript
基于JS实现EOS隐藏错误提示层代码
Apr 25 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 Javascript
JS日程管理插件FullCalendar简单实例
Feb 07 Javascript
Vue和React组件之间的传值方式详解
Jan 31 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 Javascript
解决vue项目,npm run build后,报路径错的问题
Aug 13 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实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
php单例模式示例分享
2015/02/12 PHP
PHP用FTP类上传文件视频等的简单实现方法
2016/09/23 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
jQuery 1.9使用$.support替代$.browser的使用方法
2014/05/27 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
Python通用循环的构造方法实例分析
2018/12/19 Python
python编写猜数字小游戏
2019/10/06 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
python实现在一个画布上画多个子图
2020/01/19 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
Python基于locals返回作用域字典
2020/10/17 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
师范毕业生自荐信
2013/10/17 职场文书
小学教师寄语大全
2014/04/03 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书
python实现三次密码验证的示例
2021/04/29 Python
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android