349. 两个数组的交集

给定两个数组 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

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersection = function(nums1, nums2) {
    //nlog(n)  双指针
    let res=new Set();//set中add添加重复元素 可以添加 不会有效果
    let a = nums1.sort((a,b)=>a-b)
    let b = nums2.sort((a,b)=>a-b)
    let i=0, j=0
    while(i<a.length && j<b.length){
        if(a[i]<b[j]){
            i++;
        }else if(a[i]>b[j]){
            j++;
        }else{
            res.add(a[i]);
            i++;
            j++;
        }
    }
    return [...res]


    //n^2
    let res=new Set();
    let a = nums1.sort((a,b)=>a-b)
    let b = nums2.sort((a,b)=>a-b)
    for(let i of a){       
        for(let j of b){                
            if(i === j){
                res.add(i)
            }                
        }
    }
    return [...res]

};

下面是关于new Map()和new Set()介绍对比

Map()

Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

请添摘自网络加图片描述下面是一些方法的例子

var m = new Map([['小明', 95], ['小张', 75], ['小王', 85]]);
m.get('小明'); // 95
var m = new Map(); // 空Map
m.set('小田', 20); // 添加新的key-value
m.set('小马', 28);
m.has('小田'); // 是否存在key '小田': true
m.get('小田'); // 20
m.delete('小田'); // 删除key '小田'
m.get('小田'); // undefined
//由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:
var m = new Map();
m.set('小田', 20);
m.set('小田', 21);
m.get('小田'); // 21

set()
定义/演示

Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。

通过add(key)方法可以添加元素到Set中,可以重复添加,但不会有效果:

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
s.add(4);
s; // Set {1, 2, 3, 4}
s.add(4);
s; // 仍然是 Set {1, 2, 3, 4}

通过delete(key)方法可以删除元素:

var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值