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 相关文章推荐
jQuery中文入门指南,翻译加实例,jQuery的起点教程
Feb 09 Javascript
JQuery 应用 JQuery.groupTable.js
Dec 15 Javascript
jQuery代码优化 选择符篇
Nov 01 Javascript
JS版元素周期表实现方法
Aug 05 Javascript
js实现图片轮播效果
Dec 19 Javascript
window.onerror()的用法与实例分析
Jan 27 Javascript
浅谈Express异步进化史
Sep 09 Javascript
vue中mint-ui的使用方法
Apr 04 Javascript
在Angular中使用JWT认证方法示例
Sep 10 Javascript
koa+jwt实现token验证与刷新功能
May 30 Javascript
浅谈JavaScript 声明提升
Sep 14 Javascript
Openlayers学习之地图比例尺控件
Sep 28 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日期时间函数的高级应用技巧
2009/05/16 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
thinkPHP查询方式小结
2016/01/09 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
详谈javascript异步编程
2016/02/21 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
信息系统专业个人求职信范文
2013/12/07 职场文书
技术总监管理职责范本
2014/03/06 职场文书
学习决心书范文
2014/03/11 职场文书
教师求职信范文
2014/05/24 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
党员自评材料范文
2014/12/17 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
安全保证书格式
2015/02/28 职场文书
蜗居观后感
2015/06/11 职场文书
python中subplot大小的设置步骤
2021/06/28 Python
mysql函数全面总结
2021/11/11 MySQL
Python获取字典中某个key的value
2022/04/13 Python