代码随想录算法训练营第五天|242.有效的字母异位词、 349. 两个数组的交集、202. 快乐数、1. 两数之和

36 阅读2分钟

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存放的就是我们访问过的元素。 image.png 代码

image.png

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)
        }
    }
};