滑动窗口(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、121、
多维动态规划
题号:5、
- 回文串:如果
abcba
是回文串,那么bcb
也是回文串,c
也是回文串,化解为子问题。
堆排序
题号:4
- 堆排序中,每次交换完之后,要从第
0
个位置向下调整,而不是从i
开始调整。 - 堆排序
数组
题号:1
1.
二叉树
题号:102
- 层序遍历注意Queue的使用
二分查找
题号:33
- 注意
l
和r
的遍历
DFS
题号:200
- 二叉树和图的DFS:(1)定义退出条件(二叉树是节点为null,图为行列超边界);(2)递归dfs(二叉树是递归自己的左右子节点,图是递归周围满足条件的点);(3)去重(设置visited或者用其他值标记)
ACM模式
- 输入处理
next(): 读取输入的下一个单词(以空格分隔)。
nextLine(): 读取输入的下一行文本(可用来读取一行数字末尾的换行符)。
nextInt(): 读取输入的下一个整数。
nextDouble(): 读取输入的下一个双精度浮点数。
nextBoolean(): 读取输入的下一个布尔值。 - 输出处理
(1)System.out.println 通常会比 System.out.printf 更快,后者常用于同时输出不同类型的数据
(2)格式化字符串在Java中有许多格式化操作,以下是一些常见的示例:
%d: 格式化整数。
%f: 格式化浮点数。
%s: 格式化字符串。
%c: 格式化字符。
%b: 格式化布尔值。
%n: 换行符(平台无关的换行符)。
%x: 格式化十六进制数。
%o: 格式化八进制数。
%e 或 %E: 用科学计数法格式化浮点数。
(3)除了上述基本格式化操作外,还可以指定宽度、精度和对齐方式。例如:
%4d: 指定宽度为4的整数。
%.2f: 指定保留2位小数的浮点数。
%-10s: 指定左对齐并且宽度为10的字符串。 - 数组大小预设,提前将变量声明在static区中
- 如果一直是读取整数,不用多余读取空行