一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情。
Hi, 大家好。我是新人,程序员库里。
今后会按类分享算法题。
今天给大家分享第16道leetcode上数组中使用双指针相关的算法题。
350.两个数组的交集 II
leetcode地址:leetcode-cn.com/problems/in…
难度
简单
描述
给你两个整数数组 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]
提示:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
解法1
1.属于查找表的算法。如果题目要求和次数相关,需要使用Map
2.定义变量res,来存储最后两个数组的交集
3.定义变量hash,来存储数组中的字符和出现的次数
4.开始遍历nums1,如果当hash中有当前遍历的值,就将当前值的次数加1。如果没有当前遍历的值,表示当前的值只有一个,设置当前值出现的次数是1
5.开始遍历nums2,如果当hash中有当前遍历的值,表示当前的值是两个数组的交集,就把当前的值添加到res中,同时将has中当前的值,次数减1
6.最后res中存储的是两个数组的交集,返回res即可。
代码
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
let set1 = new Set(nums1);
let set2 = new Set(nums2);
let res = [];
for(let key of set1.keys()){
if(set2.has(key)){
res.push(key)
}
}
return res;
};