---
tag: algorithm
---
# 数组
1. [二分查找](https://leetcode.cn/problems/binary-search/)
   进度：仅完成主题干。
   注意：
   - 二分查找时注意区间的边界，当取 `[left, right]` 时，当 `left == right` 是有意义的，所以循环的条件为 `while(left < right)`；同理，当取 `[left, right)` 时，循环的条件为 `while(left <= right)`。
   
2. [移除元素](https://leetcode.cn/problems/remove-element/)
   进度：仅完成主题干。
   解题：双指针法
   - 快慢指针法
   - 相向指针法(√)：减少元素移动次数
   
3. [有序数组的平方](https://leetcode.cn/problems/minimum-size-subarray-sum/)
   进度：完成主题干。
   注意：
	- 指针可以从中间向两侧扫描，最好从两侧向中间扫描。
   
4. 长度最小的子数组
   进度：仅完成主题干。
   解题：滑动窗口。
   
5. [螺旋矩阵II](https://leetcode.cn/problems/spiral-matrix-ii/)
   进度：仅完成主题干。
   解题：找规律。

# 链表
| 序号 | 章节                  | 进度 | 解题                                | 注意               | 回顾 |
| ---- | --------------------- | ---- | ----------------------------------- | ------------------ | ---- |
| 1    | 移除链表元素          | 完成 |                                     | 注意是否存在头节点 |      |
| 2    | 设计链表              | 完成 |                                     |                    |      |
| 3    | 翻转链表              | 完成 | 1.双指针<br> 2. 递归<br> 3.头尾插法 | 重新写第一二种     | √    |
| 4    | 两两交换链表节点      | 完成 | 画图确定指针先后顺序                |                    | √    |
| 5    | 删除链表倒数第N个节点 | 完成 | 双指针                              |                    |      |
| 6    | 链表相交              | 完成 | 找到相等的长度后再开始判断          |                    | √    |
| 7    | 环形链表II            | 完成 | 双指针+环内的数学等量关系           | 重新做题           | √    |

# 哈希表
| 序号 | 章节             | 进度 | 解题         | 注意                        | 回顾 |
| ---- | ---------------- | ---- | ------------ | --------------------------- | ---- |
| 1    | 有效的字母异位词 | 完成 | 哈希表       | 注意key、value的意义        |      |
| 2    | 两个数组的交集   | 完成 | 集合         |                             |      |
| 3    | 快乐数           | 完成 | 集合         | 注意条件：不为1必然出现循环 |      |
| 4    | 两数之和         | 完成 | 哈希表       |                             |      |
| 5    | 三数之和         |      | 双指针       |                             | √    |
| 6    | 四数之和         |      | 双指针       |                             | √    |
| 7    | 四数相加II       |      | 哈希表       | 注意key、value含义          | √    |
| 8    | 赎金信           | 完成 | 数组代替集合 | 适用于限定范围的key         |      |

# 字符串
| 序号 | 章节           | 进度 | 解题   | 注意                           | 回顾 |
| ---- | -------------- | ---- | ------ | ------------------------------ | ---- |
| 1    | 反转字符串     | 完成 |        |                                |      |
| 2    | 反转字符串II   |      |        | 注意循环条件                   | √    |
| 3    | 替换空格       |      | 双指针 | 从后向前操作避免每次都移动元素 | √    |
| 4    | 翻转字符串单词 |      |        |                                |      |

# 双指针法


# 栈和队列
| 序号 | 章节                         | 进度   | 解题       | 注意 | 回顾 |
| ---- | ---------------------------- | ------ | ---------- | ---- | ---- |
| 1    | 栈实现队列                   | 完成   |            |      |      |
| 2    | 队列实现栈                   | 完成   |            |      |      |
| 3    | 有效的括号                   | 完成   |            |      |      |
| 4    | 删除字符串中的所有相邻重复项 | 完成   |            |      |      |
| 5    | 逆波兰表达式                 | 完成   |            |      |      |
| 6    | 滑动窗口最大值               | 未完成 | 有序队列   |      | √    |
| 7    | 前k个高频元素                | 未完成 | 优先级队列 |      | √    |

# 贪心算法
从局部最优解推全局最优解。做题时最主要就是找反例证明贪心算法不奏效，否则大部分可以使用贪心算法。

| 序号 | 章节     | 进度 | 解题 | 注意                          | 回顾 |
| ---- | -------- | ---- | ---- | ----------------------------- | ---- |
| 1    | 分发饼干 | 完成 |      | 大胃口吃大饼干/小饼干喂小胃口 | √    |
| 2    | 摆动序列 |      |      |                               |      |