传送门
Github代码(主Python,大部分也有C++和Java)
一. 题型汇总
类别 | 日期 |
---|---|
动态规划 (DP) | 1,2,3,4,7,8,17 |
位运算 | 3,22,29 |
数据结构(重点是栈) | 5,6,9,10,11,12,20,23,28 |
单调栈 | 6,24 |
回溯DFS | 7,31 |
哈希 | 13,14 |
(路径)模拟 | 15,16,19 |
原地操作 | 21 |
链表与指针 | 18,27 |
递归 | 25,26 |
二分法 | 30 |
二. 重点题型推荐&介绍
2.1 动态规划
动态规划需要注意最重要的两点:
- 理清楚数组要存什么内容。
- 理清楚转移公式,即如何用之前的信息快速得到下一个位置的信息。
推荐题目:
Hard题,难点在于如何预处理以及构建转移公式。
Normal题:难点在于如何利用动态规划加速回溯DFS查找。
Hard题,难点在于如何构建转移公式
Hard题,难点在于如何确定动态规划数组存储什么信息。
2.2 单调栈
单调栈最重要的一点是:如何维护栈的单调性并利用栈的信息。
推荐题目:
Normal题,难点在于如何决定元素的出入栈规则。
Normal题,难点在于如何决定维护哪种元素,并制定出入栈规则。
2.3 回溯DFS
回溯DFS是有模板可套的:(以Python为例)
res = [] # 最终答案
path = [] # 每次的可行解
def backtrack(未探索区域, res, path):
if path 满足条件:
res.add(path) # 深度拷贝
# return # 如果不用继续搜索需要 return
for 选择 in 未探索区域当前可能的选择:
if 当前选择符合要求:
path.add(当前选择)
backtrack(新的未探索区域, res, path)
path.pop()
作者:fuxuemingzhu
链接:https://leetcode-cn.com/problems/subsets-ii/solution/hui-su-fa-mo-ban-tao-lu-jian-hua-xie-fa-y4evs/
推荐题目:
Normal题,难点在于动态规划,是一道很好的混合题。
Normal题,难点在于去除重复可行解。
2.4 链表与指针
链表与指针提醒一定要记住一点:能用变量代替最好用变量代替,否则诸如node.next.next.next
之类的会绕晕自己。
推荐题目:
Normal题,难点在于边界条件。
Normal题,难点在于如何快速确定切割点。
三.结语
本月的Leetcode练习总体来说难度中等,只有少数几道题比较难想出思路,也有几道题混合了多种题型,比如3号的题目是DP+位运算,7号的是回溯DFS+DP,这些题都比较有挑战性,大家可以多加练习。