刷题建议
刷题建议与debug
- 代码随想录目前基本都有了视频讲解,一定要先看视频,事半功倍。
- 写博客,将自己的感悟沉淀下来,不然会忘
- 大家提问的时候,记得要把问题描述清楚,自己在哪一步遇到了问题,做了哪些调试,而不要只是把代码甩出来,这样方便大家帮忙快速定位问题。
博客内容:(博客记录以及打卡格式)
今日学习文章链接和视频链接
Python菜鸟教程
哈希表理论基础
大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。
- hash表(散列表)一般哈希表都是用来快速判断一个元素是否出现集合里
- hash函数:通过hashCode把名字转化为数值
- hash碰撞:小李和小王都映射到了索引下标 1 的位置,这一现象叫做哈希碰撞,解决方法有线性探测法和拉链法
- hash结构:比如字典,集合等()了解原理
- 用法:空间换时间,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
454.四数相加II
自己看到题目的第一想法
- 暴力破解==》明显不行,应该会超时
看完代码随想录之后的想法
- n的四次方是不能接受的,那么可以将a+b的值作为一个整体,遍历后存入map,map的key是value,map的值是出现的次数,这相当于巧妙利用Hash
- 然后遍历C和D,如果0-(c+d)在map中出现过的话,那么它出现的次数为x,count += x
- return count
自己实现过程中遇到哪些困难
- 字典默认为空,不是0,所以要单独判断,如果n1 + n2不在hashmap里面,hashmap[n1+n2] = 1
相关题目
383. 赎金信
自己看到题目的第一想法
hashmap
,key是字符,value是出现的次数
看完代码随想录之后的想法
- 思路正确,但是字典操作错误
- 可以用数组,因为都是小写字母
- 注意先遍历谁,想清楚
15. 三数之和
自己看到题目的第一想法
- 应该是要用Hash,遍历a和b,放在
hashmap
里面,最后c=-a-b - 看
hashmap[-a-b]
是否存在,但是需要去重,abc都需要去重 - 无思路
看完代码随想录之后的想法
- 先排序,从小到大排序
- 关键逻辑在于去重
- 双指针思路->遍历i,left=i+1,right=size-1,后left和right相向移动,left不能等于right(题目要求,i,left和right不相等)
- 在拿到一个三元组后要对right和left进行去重
自己实现过程中遇到哪些困难
- 不明确在找到第一个三元组后,代码上怎么对left和right进行去重
今日收获,记录一下自己的学习时长
- 遇到问题:看下描述除了暴力,能否用Hash和双指针解决?Hash的话选择数组,set还是dict?
- 如果先排序的话是否能够更加容易解决问题
- 注意循环结束条件,边界条件,如何去重
- 注意这里能用双指针法因为需要的是value,需要排序,但是拍完序后索引就乱了,所以如果需要索引的,不能用这种思路