行业知识
代码随想录算法训练营第六天|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 [];};
下一篇:新服务器 如何测试软件?