字典:类似集合,也是存储唯一值的数据结构,但以健值对的形式来存储。
利用键值对来做各种映射关系
ES6中有字典,名为Map.
字典的常用操作:键值对的增删改查
const m = new Map() //实例化map
//增 键是'a',值为'aa'
m.set('a', 'aa')
m.set('b', 'bb')
m.set('c', 'cc')
//查看键 的值
m.get('a')
//删除
m.delete('b')
m.clear() //清空
//改 直接覆盖即可
m.set('a', 'aaa')
LeetCode 349 两个数组的交集(字典解法)
解题思路:
求nums1和nums2两个数组的交集
用字典建立一个映射关系,记录nums1里有的值
这个字典的键就是nums1的值,映射关系对应的值为是否存在 true/false
遍历nums2找出nums1里也有的值
解题步骤:
1、新建一个字典,遍历nums1,填充字典。
2、遍历nums2 遇到字典里有的值就选出来,并从字典中删除。
var intersection = function(nums1, nums2) {
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;
};
时间复杂度:我们有两个没有嵌套的循环 所以就是nums1.length+nums2.length
O(m+n)
空间复杂度:输入输出都是数组但是不能算入空间复杂度因为空间复杂度计算的是临时变量的内存消耗,我们中间临时变量是一个字典,字典不是数组矩阵但是它存储的值也可能是线性增长的 所以空间复杂度为O(m)
nums1.length = m,字典最差的情况下可能存储m个变量