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 相关文章推荐
js实现简单模态窗口,背景灰显
Nov 14 Javascript
Jquery中显示隐藏的实现代码分析
Jul 26 Javascript
jQuery 取值、赋值的基本方法整理
Mar 31 Javascript
js用拖动滑块来控制图片大小的方法
Feb 27 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
Jun 19 Javascript
基于angular2 的 http服务封装的实例代码
Jun 29 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
Jul 24 Javascript
Vue计算属性的使用
Aug 04 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
Oct 26 Javascript
Vue安装浏览器开发工具的步骤详解
May 12 Javascript
使用vue实现通过变量动态拼接url
Jul 22 Javascript
解决VUEX的mapState/...mapState等取值问题
Jul 24 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
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
Python2与Python3的区别实例分析
2019/04/11 Python
对python 调用类属性的方法详解
2019/07/02 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
追悼会上的答谢词
2014/01/10 职场文书
工会主席岗位责任制
2014/02/11 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
房展策划方案
2014/06/07 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
股份转让协议书范本
2015/01/27 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript
Python中itertools库的四个函数介绍
2022/04/06 Python