题目
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
说明:
- 输出结果中的每个元素一定是唯一的。
- 我们可以不考虑输出结果的顺序。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/intersection-of-two-arrays 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
JS实现
1、排序 + 双指针
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function (nums1, nums2) {
const result = [];
//分别对两个数组排序(从小到大)
nums1.sort((a, b) => a - b);
nums2.sort((a, b) => a - b);
const len1 = nums1.length,
len2 = nums2.length;
//双指针
let index1 = 0,
index2 = 0;
while (index1 < len1 && index2 < len2) {
const num1 = nums1[index1],
num2 = nums2[index2];
//如果两数相等
if (num1 === num2) {
//如果结果数组为空 或者 结果数组最后一个元素与num1不相等,则添加到结果数组
if (result.length === 0 || num1 != result[result.length - 1]) {
result.push(num1);
}
index1++;
index2++;
} else if (num1 < num2) {
index1++;
} else {
index2++;
}
}
return result;
};
2、哈希表
var intersection = function (nums1, nums2) {
const result = [];
const map = new Map();
//遍历nums1,加入hashmap
for (let num of nums1) {
map.set(num, true);
}
//遍历nums2,判断hashmap中是否存在,如存在,则加入结果集
for (let num of nums2) {
if (map.has(num)) {
result.push(num);
}
}
//去重
return [...new Set(result)];
};
3、indexOf
var intersection = function (nums1, nums2) {
const result = [];
for (let i = 0; i < nums1.length; i++) {
if (nums2.indexOf(nums1[i]) > -1) {
result.push(nums1[i]);
}
}
return [...new Set(result)];
};
4、Set
var intersection = function (nums1, nums2) {
const result = [];
const set1 = new Set(nums1);
const set2 = new Set(nums2);
for (let item of set1) {
if (set2.has(item)) {
result.push(item);
}
}
return result;
};