小工具知识网

当前位置: 首页 > 行业知识 > 代码随想录算法训练营第六天|242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和 (JS写法)

行业知识

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

2026-10-19 05:50:43 来源:互联网转载

242 有效的字母异位词

题���链接/文章讲解/视频讲解: https://programmercarl.com/0242.%E6%9C%89%E6%95%88%E7%9A%84%E5%AD%97%E6%AF%8D%E5%BC%82%E4%BD%8D%E8%AF%8D.html

方法一:自己写的,采用map

/** * @param {string} s * @param {string} t * @return {boolean} */var isAnagram = function(s, t) {    if(s.length !== t.length) return false;    let map = new Map();    //遍历s字符串,获得s的哈希表    for(let i = 0;i        if(!map.has(s[i])){            map.set(s[i],1);        }else{            map.set(s[i],map.get(s[i])+1);        }    }    //遍历t字符串    for(let j = 0;j        if(!map.has(t[j])){            return false;        }else{            map.set(t[j],map.get(t[j])-1);        }    }    //判断最后map里的value是不是都是0    for(let value of map.values()){        if(value !== 0){            return false;        }    }    return true;};  if(s.length !== t.length) return false;  let char_count = new Map();  for(let item of s) {    char_count.set(item, (char_count.get(item) || 0) + 1) ;  }  for(let item of t) {    if(!char_count.get(item)) return false;    char_count.set(item, char_count.get(item)-1);  }  return true;};    if(s.length !== t.length) return false;    let res = new Array(26).fill(0);    const base = "a".charCodeAt();    for(let i of s){        res[i.charCodeAt()-base]++;    }    for(let i of t){        if(!res[i.charCodeAt()-base]) return false;        res[i.charCodeAt()-base]--;    }    return true;};if(nums1.length  nums2.length) [nums1,nums2] = [nums2,nums1];    let map = new Map();    let arr = new Array();    for(let i = 0;i        if(!map.has(nums1[i])){            map.set(nums1[i],true);        }    }    for(let i = 0;i        if(map.has(nums2[i]) && map.get(nums2[i])){            arr.push(nums2[i]);            map.set(nums2[i],false);                    }    }    return arr;};    nums1 = nums1.sort((a,b) = a-b);    nums2 = nums2.sort((a,b) = a-b);    let i = 0,j = 0;    // 将要存储数据的数组设置为set类型,保证无重复    let res = new Set();    while(i        if(nums1[i]  

1 两数之和

方法一:map

使用数组和set来做哈希法的局限。

  • 数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
  • set是一个集合,里面放的元素只能是一个key,而两数之和这道题目,不仅要判断y是否存在而且还要记录y的下标位置,因为要返回x和y的下标。所以set 也不能用。

    此时就要选择另一种数据结构:map ,map是一种key value的存储结构,可以用key保存数值,用value再保存数值所在的下标。

    (第一段代码有些笨拙,需要判断不是同一元素)

    /** * @param {number[]} nums * @param {number} target * @return {number[]} */var twoSum = function(nums, target) {    let map = new Map();    for(let i = 0;i        map.set(nums[i],i);    }    for(let i = 0;i    //注意这里后面的判断是!==i        if(map.has(target - nums[i]) && map.get(target - nums[i]) !== i){            return [i,map.get(target - nums[i])];        }    }};    let map = new Map();    for(let i = 0;i        if(map.has(target-nums[i])){            return [map.get(target-nums[i]),i]        }else{            map.set(nums[i],i);        }    }    return [];};

上一篇:怎么用云服务器搭建minecraft?

下一篇:新服务器 如何测试软件?