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

作者 : admin 本文共2272个字,预计阅读时间需要6分钟 发布时间: 2024-06-17 共1人阅读

 242.有效的字母异位词

文档讲解:代码随想录

视频讲解:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词_哔哩哔哩_bilibili

1. 对每一个字符串用一个字典统计每个字母出现的次数,最后比较两个字典是否key和value都相同。都相同则是有效字母异位词, javascript中如何实现字典的key和value的比较?

2. 这个编程问题可以分解为多个查询问题,涉及到查询,用hash法肯定是最快和简单的,只需要用长度为26,值全为0的数组模拟一个hash表,遍历第一个字符串时查询hash表对应字母然后执行加1操作,然后遍历第二个字符串时查询hash表对应字母执行减1操作,遍历完两个字符串后,循环一次hash表检查是否都为0, 都为0则是有效的字母异位词,同样这种策略也可以用于判断多个字符串是否是有效的字母异位词。

3. 在JavaScript中,不能直接用inputStr[i] – ‘a’映射到对应下标,要用inputStr[i].charCodeAt(0) – ‘a’.charCodeAt(0),charCodeAt(0)是用来获取ascii码的函数。

4. 感受到了用hash法的简洁,用了一个小时左右,调试花了一些时间,在JavaScript中,不能直接用inputStr[i] – ‘a’映射到对应下标,要用inputStr[i].charCodeAt(0) – ‘a’.charCodeAt(0),charCodeAt(0)是用来获取ascii码的函数。

349. 两个数组的交集

文档讲解:代码随想录

视频讲解:学透哈希表,set使用有技巧!Leetcode:349. 两个数组的交集_哔哩哔哩_bilibili

1. 遍历第一个数组,对于每一个元素都去第二个数组中查找,如果找到了,就将这个元素保存到结果数组中,同时在第二个数组中将所有对应这个元素值的元素都删除,遍历完第一个数组后返回结果数组。

2. 也利用了hash法在查找元素方面的优点,这里由于元素长度不固定,用数组就不太适合,利用set这个数据结构(底层实现是红黑树,可以用于这种查找元素范围不固定的情况),将第一个数组转为set1,这样就自动完成了去重操作,然后遍历第二个数组,对每一个元素,在set1中执行查询操作,找到了就添加到结果set2中,利用set2完成去重操作,最后将set2转为数组返回。

3. 不知道如何用javascript创建set类型,没有理解这个题用set的原因,利用了hash法在查找元素方面的优点,这里由于元素长度不固定,用数组就不太适合,利用set这个数据结构(底层实现是红黑树,可以用于这种查找元素范围不固定的情况),将第一个数组转为set1,这样就自动完成了去重操作,然后遍历第二个数组,对每一个元素,在set1中执行查询操作,找到了就添加到结果set2中,利用set2完成去重操作,最后将set2转为数组返回。

4,用了一个小时左右,利用set完成去重操作和提高查找效率。

202. 快乐数

文档讲解:代码随想录

1. 觉得这个题是一个数学问题,不知道咋做,大致知道要用循环提取数字每一位。

2. 循环计算各位的数字平方和的过程中,如果当前计算过的数和之前计算过的数字重复了,那么再进行操作就会陷入无限循环中,确认当前计算过的数是否在之前出现了,这又是一个查找元素的问题,那么又要回归到用哈希法上来,用set保存每次计算得到的各位平方和,然后每次计算出新的各位平方和判断是否在set中出现过,如果出现过,则跳出循环返回false, 如果没有出现过则将当前的各位平方和保存到set中,直到和为1返回true, 这有点像计算机的算力解决一个数学问题,如果和不为1且没有出现重复值时,继续循环,不可能不一直循环下去同时值也不为1。

3.计算各位和的函数没有抽离处理,也没有意识到这是一个可以抽离的公共函数,导致代码比较混乱,定义set的代码写到循环里去了,然后每次都会清空set,没有达到代码的效果。

4, 需要养成好的代码习惯,这个题用了一个小时左右。

1. 两数之和 

文档讲解:代码随想录

视频讲解:梦开始的地方,Leetcode:1.两数之和,学透哈希表,map使用有技巧!_哔哩哔哩_bilibili

1. 两重循环,第二重循环不能用第一层循环的值,判断第一层循环和第二层循环的两个数是否和为target, 如果和为target,则返回下标数组。

2. 还是利用hash法查询元素快的优点,先将第一个数组转为一个map,因为查的是数组元素的值, 所以key就是数组元素的值, 而key对应的value就存放数组元素的下标,然后遍历第二个数组,每次就查询target – nums2[index]的元素是否在set中,如果在,将target – nums2[index]这个值对应的value,和第二次循环的index一起作为一组下标结果返回。

3.不知道javascript中map如何实现、如何获取map元素和设置map元素。利用hash法查询元素快的优点,先将第一个数组转为一个map,因为查的是数组元素的值, 所以key就是数组元素的值, 而key对应的value就存放数组元素的下标,然后遍历第二个数组,每次就查询target – nums2[index]的元素是否在set中,如果在,将target – nums2[index]这个值对应的value,和第二次循环的index一起作为一组下标结果返回。

4.let map = {};map[key]=value;var a = map[key];解题用了一个小时左右。

本站无任何商业行为
个人在线分享 » 代码随想录算法训练营第六天| 242.有效的字母异位词 | 349. 两个数组的交集 | 202. 快乐数 |1. 两数之和
E-->