242.有效的字母异位词
解题思路
代码
var isAnagram = function(s, t) {
var map = new Map(),count = s.length;
if(t.length !== count){
return false;
}
for(var i = 0; i < s.length; i++){
if(map.has(s[i])){
var val = map.get(s[i]);
map.set(s[i],++val);
}else{
map.set(s[i],1);
}
}
console.log(map);
for(var j = 0; j < t.length; j++){
if(map.get(t[j]) > 0){
count--;
var val = map.get(t[j])
map.set(t[j],--val);
}
}
console.log(map)
if(count === 0){
return true;
}
else{
return false;
}
};
349. 两个数组的交集
解题思路
代码
var intersection = function(nums1, nums2) {
var set1 = new Set(nums1);
var set2 = new Set(nums2);
return [...set1].filter((item)=>{
return set2.has(item)
})
};
202. 快乐数
解题思路
代码
var isHappy = function(n) {
//用一个集合来记录出现过的数字
var seen = new Set();
function getSum(n){
let sum = 0;
while(n > 0){
digit = n % 10;
sum += digit * digit;
n = Math.floor(n / 10);
}
return sum;
}
// 循环计算平方和,直到结果为1 或进入循环
while(n !== 1){
// 如果当前数字出现过,说明进入了循环
if(seen.has(n)){
return false;
}
// 将当前数字加入集合
seen.add(n)
// 计算当前数字的平方和
n = getSum(n);
}
// 如果循环结束,说明是快乐数
return true;
};
1. 两数之和
解题思路
- map用来做什么
- map中key和value分别表示什么
map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)
接下来是map中key和value分别表示什么。
这道题 我们需要 给出一个元素,判断这个元素是否出现过,如果出现过,返回这个元素的下标。
那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。
所以 map中的存储结构为 {key:数据元素,value:数组元素对应的下标}。
在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。
代码
var twoSum = function(nums, target) {
var map = new Map();
for(let i = 0;i<nums.length;i++){
let cur = target - nums[i];
if(map.has(cur)){
return [i, map.get(cur)]
}else{
map.set(nums[i],i)
}
}
};