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异或加解密效果代码
Jun 25 Javascript
js中根据字数截取字符串,不能截断url
Jan 12 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
Jul 12 Javascript
angular.js分页代码的实例
Jul 27 Javascript
获取IE浏览器Cookie信息的方法
Jan 23 Javascript
AngularJS的Filter的示例详解
Mar 07 Javascript
TypeScript入门-接口
Mar 30 Javascript
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
js实现方块上下左右移动效果
Aug 17 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
May 18 Javascript
vue实现文件上传功能
Aug 13 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
Apr 26 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
弹出模态框modal的实现方法及实例
2017/09/19 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
小程序文字跑马灯效果
2018/12/28 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
2019/06/14 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python发送http请求解析返回json的实例
2018/03/26 Python
Python之用户输入的实例
2018/06/22 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
python使用minimax算法实现五子棋
2019/07/29 Python
Python continue语句实例用法
2020/02/06 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
旅游管理专业生自荐信范文
2014/01/02 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
大学新学期计划书
2014/04/28 职场文书
班级口号大全
2014/06/09 职场文书
询价采购方案
2014/06/09 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
融资合作协议书范本
2014/10/17 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
用Python生成会跳舞的美女
2022/01/18 Python