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 相关文章推荐
解决 firefox 不支持 document.all的方法
Mar 12 Javascript
JavaScript面向对象编程入门教程
Apr 16 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
JQuery中DOM事件冒泡实例分析
Jun 13 Javascript
深入理解JQuery循环绑定事件
Jun 02 Javascript
Vue.js每天必学之内部响应式原理探究
Sep 07 Javascript
VueJS全面解析
Nov 10 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
Jan 15 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
Mar 23 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
Nov 24 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 Javascript
JavaScript实现音乐播放器
Aug 14 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
PHP写杨辉三角实例代码
2011/07/17 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
php实用代码片段整理
2016/11/12 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
2019/10/17 PHP
jQuery $.each的用法说明
2010/03/22 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
JS实现的页面自定义滚动条效果
2015/10/26 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
浅谈vue 二级路由嵌套和二级路由高亮问题
2020/08/06 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
python实现计算倒数的方法
2015/07/11 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
护理医院见习报告
2014/11/03 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
留学推荐信中文范文
2015/03/26 职场文书
集结号观后感
2015/06/08 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书