给定两个数组 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] 也是可通过的
提示:
题目信息:数组长度和大小都近乎 1000,哈希不能用数组,返回每个元素唯一,可以用 set
使用 api 和工具快速实现,业务常用
使用 遍历长数组 set 哈希缓存,遍历短数组获取结果,复杂度 O(n)
function intersection(nums1: number[], nums2: number[]): number[] {
return unique(nums1.filter((i) => nums2.includes(i)))
}
function unique<T>(arr: T[]) {
return Array.from(new Set(arr))
}
function intersection(nums1: number[], nums2: number[]): number[] {
const longSet = new Set<number>()
const resSet = new Set<number>()
let long: number[]
let short: number[]
if (nums1.length > nums2.length) {
long = nums1
short = nums2
} else {
long = nums2
short = nums1
}
for (let i = 0; i < long.length; i++) {
longSet.add(long[i])
}
for (let i = 0; i < short.length; i++) {
if (longSet.has(short[i])) {
resSet.add(short[i])
}
}
return Array.from(resSet)
}