朝颜的力扣一刷记录
学习路线:代码随想录 https://www.programmercarl.com
以及一些自言自语…
1. 数组
1. 1. 二分法
典型例题
- 搜索插入位置
- 在排序数组中查找元素的第一个和最后一个位置
- x的平方根
- 有效的完全平方数
方法论
- 采用典型的二分查找算法;
- 采用多个二分查找,组合式求解;
- 跳出“查找数组中的目标值”的思维,把二分查找的思想应用到其他题型。
1. 2. 双指针法
典型例题
- 移除元素
- 删除排序数组中的重复项
- 移动零
- 比较含退格的字符串
- 有序数组的平方
方法论
- 采用双指针法,即快慢指针法;
- 需要灵活应用两个指针。
关键还是得多刷题,强化思维,因为数组的难点在于想法和实现
1. 3. 滑动窗口法
典型例题
- 长度最小的子数组
- 水果成篮【还没完成】
- 最小覆盖子串【还没完成】
方法论
- 滑动窗口法;
- 滑动窗口法相当于是进阶版的更加灵活的双指针;
- 经常在题解看到滑窗法配合哈希表使用,学到那块的时候再来回顾一下。
1. 4. 模拟行为
典型例题
- 螺旋矩阵
- 螺旋矩阵II
- 顺时针打印矩阵
方法论
- 要熟练螺旋矩阵中核心的循环;
- 要注意循环的边界。
一定要注意循环不变性;一定要从宏观到微观的思考算法的流程。不至于这回能符合这个输入,下回又不符合这个输入了
2. 链表
2. 1. 链表基础
典型例题
- 移除链表元素
- 设计链表
2. 2. 双指针法
典型例题
- 翻转链表
- 删除链表的倒数第N个节点
- 链表相交
- 环形链表II
2. 3. 行为模拟
典型例题
- 两两交换链表中的节点
其实双指针的实现也是行为模拟
3. 哈希表
3. 1. 数组做哈希表
典型例题
- 有效的字母异位词
- 两个数组的交集
- 赎金信
方法论
- 填充和删除数组相应位置值;
- 除构建存放字母出现次数的record[26]外,对应具体问题也可构建其它类似的record[]。
3. 2. unordered_set 做哈希表
典型例题
- 快乐数
3. 3. unordered_map 做哈希表
典型例题
- 两数之和
- 四数相加II
数据结构相关理论知识要跟进学习
3. 4. 这一类用双指针更合适
典型例题
- 三数之和
- 四数之和
方法论
- 可以拓展至n数之和;
- 其方法时间复杂度为O(nn),用双指针降到O(n(n-1))。
4. 字符串
4. 1. 双指针法
典型例题
- 反转字符串
- 反转字符串II
- 替换空格
- 翻转字符串里的单词
- 左旋转字符串
4. 2. KMP算法
典型例题
- 实现strStr()
- 重复的字符串
方法论
- KMP算法需要明白:什么是前后缀?为什么要得到最长相等前后缀?怎么构造前缀表【或者说next数组】?如何利用前缀表?
5. 栈与队列
学习ing