文章目录
0、基本数据结构练习
0-1、栈
题目 | 我的做法 |
---|---|
- | 牛客网、括号序列 |
0-2、二叉树
题目 | 我的做法 |
---|---|
- | 牛客网、二叉树的之字形层级遍历(如何控制每一层的遍历) |
1.递归思维
1.1、链表
题目 | 我的做法 |
---|---|
92.反转部分链表 | 反转链表II(一次马大哈行为,谨记) |
25.K个一组反转链表 | K个一组反转链表 |
234.回文链表 | 回文链表——(多方法实现) |
22、删除单链表的倒数第n个节点 | LeetCode22、删除单链表的倒数第n个节点 |
- | 牛客网、设计LRU缓存结构 |
1.2、二叉树(递归、序列化、BST思维)
递归思维
递归思维+二叉树序列化表示
题目 | 我的做法 |
---|---|
LeetCode652、寻找重复的子树 | LeetCode652、寻找重复的子树 |
297. 二叉树的序列化与反序列化 | LeetCode297、二叉树的序列化与反序列化 |
BST树——BST思维
题目 | 我的做法 |
---|---|
LeetCode230、寻找第K小元素 | LeetCode230、寻找第K小的元素(BST的算法思维) |
538、1038、把二叉搜索树转换为累加树 | LeetCode538和1038、把二叉搜索树转换为累加树(BST思维) |
多叉树以及——题目不让做什么,我们就做什么,抓住题目提示
题目 | 我的做法 |
---|---|
341、扁平化嵌套列表迭代器 | LeetCode341、扁平化嵌套列表迭代器 |
二叉树的遍历(4种遍历,递归+迭代,将递归栈化为迭代栈的过程)
题目 | 我的做法 |
---|---|
94、二叉树的中序遍历 | LeetCode94、二叉树的中序遍历 |
144、二叉树的前序遍历 | LeetCode144、二叉树的前序遍历 |
145、二叉树的后序遍历 | LeetCode145、二叉树的后序遍历(自底向上地思考) |
2、动态规划(如何从浅入深的思考)
2.1、字符串和子序列的动态规划(排序、dp定义、实例递推、区间动态规划)
2.2、背包类型动态规划
题目 | 我的做法 |
---|---|
416、分割等和子集 | LeetCode416、分割等和子集(转为0-1背包问题) |
518、零钱兑换问题II | LeetCode518、零钱兑换II(完全背包问题) |
2.3、区间动态规划
题目 | 我的做法 |
---|---|
LeetCode887、鸡蛋掉落 | LeetCode887、鸡蛋掉落(难) |
Leetcode312、戳气球 | Leetcode312、戳气球(难) |
LeetCode1312、让字符串成为回文串的最少操作次数 | LeetCode1312、让字符串成为回文串的最少操作次数(区间动态规划方法) |
2.4、贪心选择(区间调度)
题目 | 我的做法 |
---|---|
435、无重叠区间 | LeetCode435、无重叠区间(贪心选择区间调度) |
452、用最少数量的箭引爆气球 | LeetCode452、用最少数量的箭引爆气球(贪心选择区间调度) |
55、跳跃游戏 | LeetCode55、跳跃游戏(dp或者贪心) |
45. 跳跃游戏 II | LeetCode45、跳跃游戏II(动态规划无法通过) |
2.5、系列dp问题总结
LeetCode买卖股票系列总结(动态规划或者递归、进阶状态机)
3、二分查找
3.1、数组
题目 | 我的做法 |
---|---|
7.14、最小K个数 | LeetCode面试题17.14、最小K个数 |
- | 牛客网、缺失数字 |
- | 牛客网、数组中相加和为0的三元组 |
- | 牛客网、最长递增子序列(要输出具体的序列) |
4、双指针
4.1、数组(左右指针)
题目 | 我的做法 |
---|---|
42、接雨水 | LeetCode42、接雨水(思考方向) |
- | 牛客网、数组中相加和为0的三元组 |
4.2、链表(快慢指针)
题目 | 我的做法 |
---|---|
141、判断链表是否有环 | LeetCode141、判断链表是否有环(注意不一定在头节点回环) |
22、删除单链表的倒数第n个节点 | LeetCode22、删除单链表的倒数第n个节点 |
61、旋转链表 | LeetCode61、旋转链表(递归、数学) |
4.3、其他
题目 | 我的做法 |
---|---|
- | 牛客网、找到字符串的最长无重复字符子串 |
5、其他
题目 | 我的做法 |
---|---|
- | 牛客网、合并区间 |