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 相关文章推荐
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
Feb 05 Javascript
从盛大通行证上摘下来的身份证验证js代码
Jan 11 Javascript
js实现表单检测及表单提示的方法
Aug 14 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
Jun 12 Javascript
Vue组件BootPage实现简单的分页功能
Sep 12 Javascript
Node.js 数据加密传输浅析
Nov 16 Javascript
AngularJS打开页面隐藏显示表达式用法示例
Dec 25 Javascript
JavaScript 过滤关键字
Mar 20 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
Nov 10 jQuery
bmob js-sdk 在vue中的使用教程
Jan 21 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 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 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
pycharm运行出现ImportError:No module named的解决方法
2018/10/13 Python
windows下搭建python scrapy爬虫框架步骤
2018/12/23 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
python批量解压zip文件的方法
2019/08/20 Python
Python:slice与indices的用法
2019/11/25 Python
Python pip配置国内源的方法
2020/02/14 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
Python通过format函数格式化显示值
2020/10/17 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
HTML5 canvas基本绘图之绘制矩形
2016/06/27 HTML / CSS
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
高中的职业生涯规划书
2013/12/28 职场文书
审计专业自荐信范文
2014/04/21 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP