题目:
题目截图:
解题步骤:
第一种方式,使用集合:
1.用集合对nums1去重
2.遍历nums1,筛选出nums2也包含的值
第二种方式,使用字典:
1.新建一个字典,遍历nums1,填充字典
2.遍历nums2,遇到字典里的值就选出,并从字典中删除,防止重复
代码:
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function (nums1, nums2) {
// 第一种方式,使用集合
//return [...new Set(nums1)].filter(n => nums2.includes(n));
// 第二种方式,使用字典
const map = new Map();
nums1.forEach(n => {
map.set(n, true);
});
const res = [];
nums2.forEach(n => {
if (map.get(n)) {
res.push(n);
map.delete(n);
}
});
return res;
};
时间复杂度分析:
第一种方式:
时间复杂度是O(m * n),m是nums1去重之后的长度,n是nums2的长度,因为是两层循环。
第二种方式:
时间复杂度是O(p + n),p是nums1的长度,n是nums2的长度
空间复杂度分析:
第一种方式:
空间复杂度是O(m),m是nums1去重之后的长度
第二种方式:
空间复杂度是O(m),m是nums1去重之后的长度
怎么样,是不是很简单,你学会了吗?
如果这篇文章能够帮助到您,希望您不要吝惜点赞👍👍和收藏💖💖,您的支持是我继续努力的动力 💪💪!!!