滑动窗口(ok)
题号:3、209、76
- 定义好窗口的左边界
left
和右边界right
- 一般是只需要遍历
right
,满足条件后调整left
链表
题号:206、92、146、25、21
- 反转链表主要是设置好
pre
(初始为null
)和cur
(初始为第一个需要反转的元素),依次往后遍历 - 伪头部节点
ListNode dummy = new ListNode(0, head)
- LRU缓存使用双向链表和哈希表,注意提前声明
Node
的数据结构,put操作可能会修改value值。 - K 个一组翻转链表重点是确定好
pre
、start
、end
和endNext
- 合并两个链表的时候,直接连接即可,无需
new
新节点
快速排序
题号:215、4
- 快速排序的核心思想是分治,选择一个哨兵,将序列分为大于哨兵的序列和小于哨兵的序列,再分别进行快速排序
- 因为是分别进行快速排序,所以一开始就不要把上下界设置死
- 快速排序
双指针
题号:15、
-
在
List<List<Integer>>
中添加元素:List<Integer> list = Arrays.asList(num, nums[left], nums[right]); ans.add(list);
一维动态规划
题号:53
多维动态规划
题号:5、
- 回文串:如果
abcba
是回文串,那么bcb
也是回文串,c
也是回文串,化解为子问题。
堆排序
题号:4
- 堆排序中,每次交换完之后,要从第
0
个位置向下调整,而不是从i
开始调整。 - 堆排序
数组
题号:1
1.
二叉树
题号:102
- 层序遍历注意Queue的使用
二分查找
题号:33
- 注意
l
和r
的遍历
DFS
题号:200
- 二叉树和图的DFS:(1)定义退出条件(二叉树是节点为null,图为行列超边界);(2)递归dfs(二叉树是递归自己的左右子节点,图是递归周围满足条件的点);(3)去重(设置visited或者用其他值标记)