题目描述
给定两个数组 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
分析解答
看到唯一,可以直接想到用 Set。然后思路嘛,没什么难的,直接上代码。
js
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function (nums1, nums2) {
let res = []
for (let i = 0; i < nums1.length; i++) {
let item = nums1[i]
for (let j = 0; j < nums2.length; j++) {
if (item == nums2[j]) {
res.push(item)
}
}
}
return [...new Set([...res])]
};
let nums1 = [1, 2, 2, 1], nums2 = [2, 2]
console.log(intersection(nums1, nums2))
思路拓展
就是一些简单点的写法。
js
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function (nums1, nums2) {
if (nums1.length < nums2.length) {
[nums1, nums2] = [nums2, nums1]
}
let nums1Set = new Set(nums1)
let resSet = new Set()
// for (const number of nums2) {
// nums1Set.has(number) && resSet.add(number)
// }
// 循环 比 迭代器快
for(let i = nums2.length - 1; i >= 0; i--) {
nums1Set.has(nums2[i]) && resSet.add(nums2[i]);
}
return Array.from(resSet)
};
let nums1 = [1, 2, 2, 1], nums2 = [2, 2]
console.log(intersection(nums1, nums2))
// intersection(nums1,nums2)
js
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function (nums1, nums2) {
return Array.from(new Set(nums1.filter(item => nums2.includes(item))))
};
let nums1 = [1, 2, 2, 1], nums2 = [2, 2]
console.log(intersection(nums1, nums2))
// intersection(nums1,nums2)