刷题建议
刷题建议与debug
- 代码随想录目前基本都有了视频讲解,一定要先看视频,事半功倍。
- 写博客,将自己的感悟沉淀下来,不然会忘
- 大家提问的时候,记得要把问题描述清楚,自己在哪一步遇到了问题,做了哪些调试,而不要只是把代码甩出来,这样方便大家帮忙快速定位问题。
博客内容:(博客记录以及打卡格式)
今日学习文章链接和视频链接
Python菜鸟教程
哈希表理论基础
大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。
- hash表(散列表)一般哈希表都是用来快速判断一个元素是否出现集合里
- hash函数:通过hashCode把名字转化为数值
- hash碰撞:小李和小王都映射到了索引下标 1 的位置,这一现象叫做哈希碰撞,解决方法有线性探测法和拉链法
- hash结构:比如字典,集合等()了解原理
- 用法:空间换时间,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
242.有效的字母异位词
自己看到题目的第一想法
- 暴力破解
看完代码随想录之后的想法
- 数组是简单的hash表,这题a-z只有26个字母,可以设置个数组a[0_25]分别的value分别表示a-z出现的次数
- 最后遍历数组,如果有a[i]的value不为0,则表示不是字母异位词
自己实现过程中遇到哪些困难
record = [0]*26,忘了列表怎么初始
- record[ord(i) - ord(“a”)] += 1 的作用是将字符 i 出现的次数加一,通过将字符映射到 record 列表中的相应位置来实现。这种技巧通常在处理字符串中的字符统计问题时很有用。
相关题目
349. 两个数组的交集
自己看到题目的第一想法
- 用数组来hash,遍历
nums1
,if a[nums1[i]
] == 0:a[nums1[i]
] += 1 - 遍历
nums2
,if a[nums2[i]
] != 0 b[count ++] = [nums2[i]
看完代码随想录之后的想法
- 整体思路没错,但是代码处理出现问题
- hash结构选择set或者数组,像这种只要一个的用set比较好
- 使用数组来做哈希的题目,是因为题目都限制了数值的大小。
- 通过这道题,熟悉数组 + 集合
202. 快乐数
自己看到题目的第一想法
- 没思路,不知道求和过程咋写
看完代码随想录之后的想法
- 明确怎么求和,单独写个函数
- 如果sum重复出现,就代表陷入死循环
- 怎么判断sum是否重复出现过?==》用set
- 题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。
自己实现过程中遇到哪些困难
今日收获,记录一下自己的学习时长
1. 两数之和
自己看到题目的第一想法
- 判断对应的target是否在数组里==》hash法
- 不清楚用哪个数据结构
看完代码随想录之后的想法
- 本题,我们不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。
- 接下来需要明确两点:map用来做什么?map中key和value分别表示什么?
- 这道题 我们需要 给出一个元素,判断这个元素是否出现过,如果出现过,返回这个元素的下标。
- 那么判断元素是否出现,这个元素就要作为key,所以数组中的元素作为key,有key对应的就是value,value用来存下标。
- 遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。
自己实现过程中遇到哪些困难
- 对于数组,set,map这三种数据结构不熟悉,不清楚该用哪个
- 具体的思路没有分析出来