数据结构-字典
字典定义

基本操作
const m = new Map();
m.set('a', '123');
m.set('b', 'bb');
m.delete('b');
m.set('a', 'aa');
console.log(m.get('a'));
刷题
题目描述

解题思路

解题步骤

Code
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;
};
时间复杂度 空间复杂度分析
- 因其中有forEach(),所以时间复杂度为
O(n)
- 因字典中的值随数组的大小而线性增长,所以空间复杂度为
O(n)
题目描述

代码优化

Code
var isValid = function(s) {
if(s % 2 === 1) false;
const stack = [];
const map = new Map();
map.set('(', ')').set('[', ']').set('{', '}');
for (let i = 0; i < s.length; i++){
const c = s[i];
if( map.has(c)){
stack.push(c);
}else{
const t = stack[stack.length - 1];
if(map.get(t) === c ){
stack.pop();
}else {
return false;
}
}
}
return stack.length === 0;
};
时间复杂度 空间复杂度分析
- 因其中有for循环,所以时间复杂度为
O(n)
- 因其中有数组,所以空间复杂度为
O(n)
题目描述

解题思路

解题步骤

Code
var twoSum = function(nums, target) {
const map = new Map();
for (let i = 0; i< nums.length; i++){
const n = nums[i];
const n2 = target - n;
if(map.has(n2)){
return [map.get(n2), i];
}else{
map.set(n, i);
}
}
};
时间复杂度 空间复杂度分析
- 因其中有for循环,所以时间复杂度为
O(n)
- 因字典中的值随数组的大小而线性增长,所以空间复杂度为
O(n)
题目描述

解题思路

解题步骤

Code
var lengthOfLongestSubstring = function(s) {
let l = 0;
let res = 0;
const map = new Map();
for (let r = 0; r < s.length; r++){
if(map.has(s[r]) && map.get(s[r]) >= l){
l = map.get(s[r]) + 1;
}
res = Math.max(res, r - l + 1);
map.set(s[r], r);
}
return res;
};
时间复杂度 空间复杂度分析
- 因其中有for循环,所以时间复杂度为
O(n)
- 因字典中的值随数组的大小而线性增长,所以空间复杂度为
O(n)
题目描述(有点难)

解题思路

解题步骤

Code
时间复杂度 空间复杂度分析
- 因其中有for循环,所以时间复杂度为
O(n)
- 因字典中的值随数组的大小而线性增长,所以空间复杂度为
O(n)
总结
