文章目录

  • 零. Java 常用接口函数
  • 一. 动态规划
  • 二. 链表
  • 三. 哈希表
  • 四. 滑动窗口
  • 五. 字符串
  • 六. DFS、BFS
  • 七. 二分法
  • 八. 二叉树
  • 九. 偏数学、过目不忘 and 原地算法等
  • 十. 每日一题

前言:
是时候开一个对于我的 LeetCode 专栏的总结索引了= =
虽然说大概只刷了150道左右,不过应该也可以简单总结一下了!
题型主要是 LeetCode hot100 + 剑指Offer,也有其他的一些高频题
每日一题持续更新中

零. Java 常用接口函数

集合类

/*** tip 1:注意多态情况下,只能用父类函数;想要用子类独占函数,就得用子类声明**/// 1. ArrayList
list.add(element); // 加到尾部
list.size();List<int[]> list = new ArrayList<>();
int[][] arr = list.toArray(new int[list.size()][2]); // 链表 -> 数组
list = Arrays.asList(arr); // 数组 -> 链表
queue.stream().mapToInt(Integer::valueOf).toArray(); // Integer -> int// 2. LinkedList
list.add(element); // 加到尾部
list.addFirst(element); // 加到头部list.removeFirst();
list.removeLast();list.getFirst();
list.getLast();// 3. Deque:双向队列(注意:不能加入 null 元素,而 LinkedList 可以)
Deque<Integer> deque = new ArrayDeque<>(); // ArrayDeque 可以作为队列、栈来用,效率都更高
deque.offerFirst(element); // 加队头 or 加队尾
deque.offerLast(element); // 也可以换成 addFirst、addLastdeque.pollFirst(); // 出队头 or 出队尾(会返回元素)
deque.pollLast(); // 也可以换成 removeFirst、removeLastdeque.getFirst();
deque.getLast();// 4. HashMap
hashmap.put(k, v);
hashmap.get(k); // 获取 k 对应的 v
hashmap.size();
hashmap.isEmpty();
hashmap.containsKey(key1); // 判断 key1 是否存在
hashmap.containsValue(value1); // 判断 value1 是否存在// 5. HashSet
hashset.add(element);
hashset.contains(element);
hashset.remove(element);
hashset.size()// 6. Stack
stack.push();
stack.pop();
stack.peek();
stack.isEmpty();// 7. PriorityQueue 优先队列(堆)
// 知识点:小顶堆存较大值,大顶堆存较小值(便于维护)
// 注意:泛型函数的 Labmda 表达式需要注明类型(如下)
PriorityQueue<Integer> queue = new PriorityQueue<>((Integer a, Integer b) -> (a - b));

数学类

Math.max(num1, num2); // 取最大值
Math.min(num1, num2); // 取最小值
Arrays.sort(arr); // 排序数组
Arrays.sort(arr, (a, b) -> (a[0) - b[0])) // 自定义排序方式的 sort

字符串

// String
char[] arr = s.toCharArray(); // 转化成字符数组,提高
String s2 = s1.substring(0, 3); // 截取,闭开区间[0,3)
char c = s1.charAt(1); // 选取元素,效率比较慢
s.length(); // 用函数获取长度,数组则直接 arr.length
s.split(",")// 分割字符串,返回字符串数组(注意不能用".")int num = Integer.parseInt(s); // String 转换成 int
String s1 = Integer.toString(num); // int 转换成 String
String s2 = "" + num; // 也可以这样做// StringBuilder:这里的 leetcode 都是单线程,因此不涉及 StringBuffer
sb.append("abc"); // 添加到尾
sb.delete(1, 3); // 删除,闭开区间[1, 3)的元素
sb.deleteCharAt(index); // 删除下标元素

一. 动态规划

考察的大头了,大部分题目都用的这玩意

知识点

  • 三要素:边界处理、最优子结构、状态转移方程
  • 滚动数组:用于节约空间复杂度,可能需要通过逆序处理来实现无后效性
  • 树形dp:树结构的dp
  • 数位dp:对象是数字的各个位的dp
  • 01背包问题:取 or 不取的背包问题
  • 主要就是:如何找出三要素
  • O(1) 空间复杂度:逻辑上的数组,有时可以直接通过几个变量实现

题目
5.最长回文子串(字符串)
42. 接雨水(常考的 hard,思路还是挺好用的,在后面刷题也有类似的做法)
32. 最长有效括号(算是比较有难度的 hard 了,需要细分很多情况,考虑边界)
53. 最大子序和(常考 easy 题,思路还是很值得学习的:负收益舍弃)
128. 最长连续序列(哈希表)(被字节面过)
62. 不同路径(dp入门题)
64. 最小路径和(同上)
70. 爬楼梯(同上)
96. 不同的二叉搜索树(有点东西的,空树也算一种树,方程推导思路也值得学习,容易忘)
309. 最佳买卖股票时机含冷冻期(分状态,股票系列)
312. 戳气球(很有意思的一道题,状态考虑的思路很nice)
121 / 剑指 Offer 63. 买卖股票的最佳时机
198. 打家劫舍
213. 打家劫舍 II
337. 打家劫舍 III(树形 DP)
221. 最大正方形(思路题)
279. 完全平方数(思路题)
322. 零钱兑换(和上面的279思路很像,这题麻烦点)
338. 比特位计数(位运算)
1143. 最长公共子序列(字符串)
139. 单词拆分(字符串)
剑指 Offer 10-I. 斐波那契数列
剑指 Offer 60. n个骰子的点数
剑指 Offer 46. 把数字翻译成字符串
剑指 Offer 47. 礼物的最大价值
剑指Offer 43. 1~n 整数中1出现的次数(数位dp)
剑指Offer 19. 正则表达式匹配
72. 编辑距离(字符串)
————————【背包】————————————
416. 分割等和子集(背包、滚动数组)
494. 目标和(背包、滚动数组)


二. 链表

知识点

  • 这块主要是链表结点之间关系的处理
  • 头结点、尾结点的边界处理也要注意,小心空指针

题目
2.两数相加
21. 合并 2 个有序链表
23. 合并 K 个升序列表(归并、分治)(很清晰的一道 hard,有前导题 合并 2 个有序链表)
19.删除链表的倒数第N个结点(快慢指针)
146. LRU缓存机制(手写双向链表 + 调库HashMap,注意结点关系处理)
160. 相交链表(原地算法,有点偏数学)
206. 反转链表 (递归 or 迭代,常考题了)
25. K个一组翻转链表(递归)(相当于 206.反转链表 + 递归)
141. 环形链表(快慢指针)
142. 环形链表 II(快慢指针,公式)
206. 反转链表(递归 + 迭代两种做法)
234. 回文链表(反转 + 快慢指针)
160. 相交链表
143. 重排链表(快慢指针,翻转链表)
148. 排序链表(双重递归、快慢指针、合并有序链表)
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 35. 复杂链表的复制(哈希表、原地算法)


三. 哈希表

知识点

  • HashMap 可以存 null 作为键值
  • 查询复杂度 O(1)

题目
1.两数之和


四. 滑动窗口

知识点

  • 感觉这类题型,大多应用主体都是字符串呀!
  • 主要涉及到几点操作:滑动窗口怎么拓增、缩小、移动

题目
3.无重复字符的最长字串(HashMap)
76. 最小覆盖子串(和上面的3很像)
438. 找到字符串中所有字母异位词
剑指 Offer 57- II. 和为 s 的连续正数序列
76. 最小覆盖子串(字符串)


五. 字符串

当然,涉及字符串的很多题目也会在四.滑动窗口、一. 动态规划中出现,这里不重复列出题目啦~

知识点

  • 写这里的题目,要对 String、StringBuilder 的库函数有一定了解噢~

题目
49. 字母异位词分组
20. 有效的括号(栈)
415. 字符串相加
394. 字符串解码
剑指 Offer 58 - I. 翻转单词顺序(双指针)
剑指 Offer 67. 把字符串转换成整数


六. DFS、BFS

知识点

  • DFS:一路到底!
  • BFS:用到队列,一层一层地跑完
  • 剪枝:通过限定条件,减少需要递归的枝条,提高效率
  • boolean[] visited:访问数组,用于递归中记录是否访问过。一般会涉及回滚

题目
46. 全排列(DFS、队列)
39. 组合总和(DFS、队列)
22. 括号生成(DFS、剪枝)
17. 电话号码的字母组合(DFS)
78. 子集(DFS)
79. 单词搜索 && 剑指 Offer 12 矩阵中的路径(DFS)
301. 删除无效的括号(DFS,字符串)
200. 岛屿数量(DFS)
剑指 Offer 13-. 机器人的运动范围(DFS,和岛屿问题一样用的感染方法呢!)
剑指 Offer 38. 字符串的排列(字符串)
剑指 Offer 93. 复原 IP 地址(字符串)
51. N 皇后(字符串、经典题)


207. 课程表(图、BFS)
399. 除法求值(图、BFS)


七. 二分法

诶,二分法在 leetcode 题库里还是有一席之地的,要学好也得多实践噢~

知识点

  • 二分法和时间复杂度O(logN)挂钩
  • 注意边界,小心死循环
  • 分区 [left, mid],[mid + 1, right],注意 mid 的取值(向上 or 向下)
  • while(left < right) 循环中,分两种情况、还是三种情况(大于、等于、小于)

题目
34. 在排序数组中查找元素的第一个和最后一个位置
33. 搜索螺旋排序数组
4. 寻找两个正序数组的中位数(二分排除)
69. x 的平方根
35. 搜索插入位置(内附二分法总结)
162. 寻找峰值


八. 二叉树

知识点

  • 搜索二叉树:左子树均小于根,右子树均大于根
  • 完全二叉树:倒数第二层结点全满
  • 满二叉树:倒数第一层结点全满
  • 自底向上:从上往下递归,再从下往上收束结果(比如114. 二叉树展开为链表)
  • 自顶向下:从上往下,不用返回结果来收束(如 104. 二叉树的最大深度)
  • 做二叉树的题目时,多半用到递归,那么可以多总结一下自底向上、自顶向下的情况。遇到题目的时候先分析是哪一种,再回忆一下常用的处理思路。

题目
102. 二叉树的层序遍历(DFS + 队列即可)
94 & 144 & 145. 二叉树的前序、中序、后序遍历(迭代用,后序新增pre结点)
98. 验证二叉搜索树(DFS、中序遍历)(pre + 中序,保证当前最左边 && 次左边对比
101. 对称二叉树(递归)
102. 层序遍历(队列、递归)
剑指 Offer 55 - II. 平衡二叉树(DFS)
104. 二叉树的最大深度(DFS)
105. 从前序与中序遍历序列构造二叉树(哈希表、递归)(还有前后、中后的题,要多看
114. 二叉树展开为链表(链表、递归、自底向上)
617. 合并二叉树(DFS)
226. 翻转二叉树(DFS、自顶向下 || 自底向上)
543. 二叉树的直径(DFS、自底向上)
124. 二叉树中的最大路径和(自底向上 DFS)
236. 二叉树的最近公共祖先(自底向上)
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
538. 把二叉搜索树转换为累加树(自底向上)
112. 路径总和 I
113. 路径总和 II
437. 路径总和 III(双重递归)
剑指 Offer 26-. 树的子结构 (双重递归
剑指 Offer 33. 二叉树的后序遍历序列(辅助栈)
剑指 Offer 36. 二叉搜索树与双向链表(链表、原地算法)
117. 填充每个节点的下一个右侧节点指针 II(原地)


208. 实现 Trie(前缀树)
958. 二叉树的完全性检验(BFS)
199. 二叉树的右视图(BFS)
剑指Offer 37. 序列化二叉树(队列、字符串)


九. 偏数学、过目不忘 and 原地算法等

这一块是记录那些比较偏数学,或者容易初见杀,但是实际代码量不多 or 写过一遍就忘不掉思路的题目。

知识点

  • 原地算法:O(1)空间复杂度,要求原地的题目不少,看看能不能总结点规律出来

题目
55. 跳跃游戏(贪心法)
48. 旋转图像(原地算法、矩阵转置)
15. 三数之和(双指针)
11. 盛最多水的容器(双指针)
7. 整数反转(对溢出判断的做法,很值得学习!)
6. Z字形变化(主要考察思路的一道题,思路比较独特,类似压缩)
56. 合并区间(双指针,排序)(用了一波 Arrays.sort(arr, Lambda),还有链表 - 数组转化)
84. 柱状图中最大的矩形(单调栈)
85. 最大矩形(用到84,动态规划)
406. 根据身高重建队列(逆序排 + 正序排)
253. 会议室(上下车问题)
169. 多数元素(摩尔投票法)
155. 最小栈(栈)
剑指 Offer 59 - II. 队列的最大值(最大队列,和最小栈差不多)
283. 移动零
470. 用Rand7()实现Rand10()(常考题、代码少)
461. 汉明距离(位运算)
347. 前K个高频元素(优先队列)
263. 丑数
232. 用栈实现队列
225. 用队列实现栈(类似 GC 复制算法)
88. 合并两个有序数组(双指针)
剑指 Offer 21-. 调整数组顺序使奇数位于偶数前面(双指针)
剑指 Offer 61-. 扑克牌中的顺子(哈希表)
剑指 Offer 65. 不用加减乘除做加法(位运算)
剑指 Offer 64. 求1 + 2 + … + n(限制语法、二刷)
剑指 Offer 31. 栈的压入、弹出序列
剑指 Offer 16. 数值的整数次方(分治)
剑指 Offer 45. 把数组排成最小的数(Lambda)
剑指 Offer 14. 剪绳子 I、II(动态规划、数学方法)
621. 任务调度器(桶)


  • 找数合集:

剑指 Offer 03. 数组中重复的数字(原地)数组转换成逻辑上的哈希表,很有意思
136. 只出现一次的数字(位运算)亦或性质:同数得0,与0不变
剑指 Offer 56 . 数组中数字出现的次数(类似上面的136,但是要复杂一点)
448. 找到所有不存在的数(原地) 数组常用的取负、取余处理
287. 寻找重复数(原地)转换成逻辑上的链表,再进行找入环点操作(环形链表II的兄弟题目
26. 删除有序数组中的重复项(原地)挺简单的。。逐个推就行
152. 乘积最大子数组(重要)(记录 iMax、iMin,根据新值决定交换 or 更新成当前值)
215. 数组中的第K个最大元素(TOP K,快排、堆排)
240. 搜索二维矩阵II
238. 除自身以外数组的乘积
27. 移除元素(原地)
41. 缺失的第一个正数(构建哈希)
54. 螺旋矩阵
560. 和为 k 的子数组(前缀和,哈希表)
剑指 Offer 15-. 二进制中1的个数(位运算)
剑指 Offer 57-. 和为s的两个数字(对撞双指针)
剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环、数学方法)
31. 下一个排列(原地)
剑指Offer 51. 数组中的逆序对(归并排序)
剑指Offer 59. I 滑动窗口的最大值(单调队列)
剑指Offer 41. 数据流中的中位数(优先队列,堆)
581. 最短无序连续子数组

十. 每日一题

闲着也是闲着,不如打打每日,图个新鲜!
比较简单的题就直接放题目地址了,有点意思的就写篇博客记录!

500. 键盘行(打表题,这里直接用 Map 映射就行)
575. 分糖果(用 Set,然后理清楚问题本质即可,四行代码解决)
367. 有效的完全平方数(二分法 or 数学公式)
268. 丢失的数字(还不错!用的异或很巧妙)
598. 范围求和 II(思路转移)
299. 猜数字游戏(巧妙代码块)
495. 提莫攻击(一开始求稳想模拟,但实际上正常循环即可)
375. 猜数字游戏 II(DFS、动态规划,有点像猜气球)
319. 灯泡开关(一行流,纯数学题。模拟反而超时,我觉得模拟意义还更大…)
318. 最大单词长度乘积(还不错!位运算)
563. 二叉树的坡度(二叉树递归题,还行)
397. 整数替换(DFS,其实位运算更高效,偷懒了)
594. 最长和谐子序列(滑动窗口,感觉其实可以 mid)
559. N 叉树的最大深度(DFS,和二叉树最大深度没啥区别…)
384. 打乱数组(洗牌算法)
859. 亲密字符串(分好情况就行= =)
423. 从英文中重建数字(字符串、偏思路)
700. 二叉搜索树中的搜索(简单DFS,三行写完)
519. 随机翻转矩阵(双指针、随机)
1446. 连续字符(简单题我重拳出击)
506. 相对名次(哈希表)
383. 赎金信(简单题我重拳出击)
1816. 截断句子(转化成循环问题即可)
794. 有效的井字游戏(分好情况即可)
709. 转换成小写字母(接口题)
1518. 换酒问题(先换再喝,注意结束条件)
419. 甲板上的战舰(类似岛屿数量,进阶做法也只是修改一下即可)
1609. 奇偶树(BFS)
1078. Bigram 分词(跑一次遍历就行)
89. 格雷编码(三行代码,板子题;通信使用,优点)
1629. 按键持续时间最长的键(题干最啰嗦的easy题…)
334. 递增的三元子序列(300的兄弟题,偏思路)
373. 查找和最小的 K 对数字(堆、优先队列)
1716. 计算力扣银行的钱(公式题,等差数列)

【LeetCode 总结】Leetcode 题型分类总结、索引与常用接口函数相关推荐

  1. 面试官系列 - LeetCode链表知识点题型总结

    文章目录 前言 知识点 什么是链表 类别 单向链表 循环链表 双向链表 双向循环链表 与数组的性能对比 优缺点 常用技巧 题型总结 基本操作 删除类 翻转类题型 合并链表 环形链表 拆分链表 排序链表 ...

  2. [Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找)

    [Golang]力扣Leetcode - 852. 山脉数组的峰顶索引(二分查找) 题目:符合下列属性的数组 arr 称为 山脉数组 : arr.length >= 3 存在 i(0 < ...

  3. 【MySQL】Leetcode刷题--数据库(MySQL)常用的函数及语法

    Leetcode数据库(MySQL)常用的函数 日期函数 datediff() date_format() TimeStampDiff() period_add() extract() 字符串操作 t ...

  4. 【LeetCode】LeetCode之跳跃游戏——动态规划+贪心算法

    [LeetCode]LeetCode之打家劫舍[暴力递归.动态规划.动态规划之优化空间的具体分析与实现] https://blog.csdn.net/Kevinnsm/article/details/ ...

  5. 杭电acm2151题java的解法,杭电ACM题型分类

    杭电ACM题型分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.1032.1037.1040.1048.1 ...

  6. 美国大学生数学建模竞赛赛题题型分类

    美国大学生数学建模竞赛赛题题型分类 美赛赛题应用模型 • 运筹优化类问题(规划模型.排队论.神经网络.启发式算法) • 评价类问题(层次分析法.聚类分析法.主成分分析评价法等) • 机理分析类问题(回 ...

  7. 公众号500篇文章分类和索引

    公众号的文章,已经累积到了500篇,每次数字的更迭,都会从中吸取经验和教训,得到一些启发,当然,少不了读者们的支持和鼓励,这些都是动力,督促着我. 人生面临很多的选择,有对有错,但其实对错是相对来说的 ...

  8. 托福 独立写作题型分类与总结

    未经允许,禁止转载                            托福独立写作题型分类与总结 下表中汇总了2006年以来出现过的所有的独立写作题型及其标志词,其中subject指的是主体:比如 ...

  9. destoon首页底部加产品分类拼音索引

    产品分类拼音索引: {php $LETTER = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', ...

最新文章

  1. spring jpa mysql集群_Spring Boot系列之十四 JPA 连接mycat
  2. 单片机入门-矩阵键盘控制数码管显示
  3. C# VC HTTP POST GET(转)
  4. C# MVC 使用 CKEditor图片上传 提示“不正确的服务器响应”
  5. 【C#学习】delegate(委托) 和 event(事件)
  6. VTK:简单操作之RandomSequence
  7. LVS(12)——sh
  8. java字节码_好的,每个接触Java字节码的人
  9. d630无电池升级bios_太重要,你想要的电脑BIOS全面解读与设置(下)
  10. 一文读懂Java多线程原理
  11. 16QAM-调制解调MATLAB
  12. DM数据库归档备份还原
  13. SVN版本控制介绍与使用(超详细版)
  14. Java实现发送短信
  15. gcc用-O0优化无问题,-O3优化时程序崩溃的问题
  16. 春节不断电之机器学习 —— 决策树
  17. 相机ISO是什么 ISO是什么意思?
  18. 传统企业如何做数字化转型?弄懂这3大底层逻辑你就懂了
  19. 并行传输VS串行传输
  20. 当没有接口文档时候,测试人员如何测试?

热门文章

  1. python自己创建模块路径_python之本地模块/包使用和创建
  2. oracle11g session,Oracle11g中Killsession心得
  3. python常用算法有哪些_python常见的排序算法有哪些?
  4. word交叉引用插入文献后更新域之后编号未更新
  5. pytorch两种常用的学习率衰减方法
  6. OpenCV学习笔记(三):图像对比度、亮度调整源码
  7. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 6丨统计各专业学生人数【难度中等】
  8. 精益创业~如何驾驭愿景
  9. oracle数据库配置助手来初始化参数,使用服务器参数文件(SPFILE)管理初始化参数...
  10. linux中写脚本不能写中文,Linux系统中Sublime Text无法输入中文怎么办?