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 相关文章推荐
Sample script that deletes a SQL Server database
Jun 16 Javascript
复制本贴标题和地址的js代码
Jul 01 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
Mar 28 Javascript
Javascript 加载和执行-性能提高篇
Dec 28 Javascript
原生javascript兼容性测试实例
Jul 01 Javascript
模拟一个类似百度google的模糊搜索下拉列表
Apr 15 Javascript
js子页面获取父页面数据示例
May 15 Javascript
JavaScript实现基于十进制的四舍五入实例
Jul 17 Javascript
laypage.js分页插件使用方法详解
Jul 27 Javascript
详解js中的几种常用设计模式
Jul 16 Javascript
解决Vue中使用keepAlive不缓存问题
Aug 04 Javascript
浅谈es6中的元编程
Dec 01 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
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
非常实用的php弹出错误警告函数扩展性强
2014/01/17 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
简述Python2与Python3的不同点
2018/01/21 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
医院护士的求职信范文
2013/12/26 职场文书
拓展培训心得体会
2014/01/04 职场文书
财经学院自荐信范文
2014/02/02 职场文书
美术教学感言
2014/02/22 职场文书
学术会议主持词
2014/03/17 职场文书
学校食品安全责任书
2015/01/29 职场文书
硕士学位申请报告
2015/05/15 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android