ACM金牌选手整理的【LeetCode刷题顺序】
- 2021 年 7 月 10 日
- 筆記
- JAVA, leetcode, 笔试, 算法, 面试
算法和数据结构知识点图
首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助。
下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看。
后面是为大家 精心挑选的LeetCode题单,并根据题目知识点的类型分好了类别,大家可以根据每个知识点,进行有针对性的刷题。
数据结构
数组&双指针
-
LeetCode 1. 两数之和
-
LeetCode 4. 寻找两个正序数组的中位数
-
LeetCode 15. 三数之和
-
LeetCode 75. 颜色分类
-
LeetCode 76. 最小覆盖子串
-
LeetCode 142. 环形链表 II
-
LeetCode 234. 回文链表
-
LeetCode 283. 移动零
链表
-
LeetCode 19. 删除链表的倒数第 N 个结点
-
LeetCode 148. 排序链表
-
LeetCode 160. 相交链表
-
LeetCode 206. 反转链表
队列&栈
-
LeetCode 20. 有效的括号
-
LeetCode 21. 合并两个有序链表
-
LeetCode 84. 柱状图中最大的矩形
-
LeetCode 85. 最大矩形
-
LeetCode 155. 最小栈
-
LeetCode 239. 滑动窗口最大值
-
LeetCode 394. 字符串解码
-
LeetCode 739. 每日温度
-
LeetCode 3. 无重复字符的最长子串
哈希表
-
LeetCode 49. 字母异位词分组
-
128. 最长连续序列
-
LeetCode 141. 环形链表
-
LeetCode 146. LRU 缓存机制
-
LeetCode 560. 和为K的子数组
二叉树
-
LeetCode 94. 二叉树的中序遍历
-
101. 对称二叉树
-
102. 二叉树的层序遍历
-
LeetCode 104. 二叉树的最大深度
-
LeetCode 105. 从前序与中序遍历序列构造二叉树
-
LeetCode 114. 二叉树展开为链表
-
LeetCode 543. 二叉树的直径
二叉搜索树
- LeetCode 96. 不同的二叉搜索树
- LeetCode 98. 验证二叉搜索树
算法
模拟
- LeetCode 48. 旋转图像
贪心
- LeetCode 11. 盛最多水的容器
- LeetCode 714. 买卖股票的最佳时机含手续费
- LeetCode 122. 买卖股票的最佳时机 II
- LeetCode 55. 跳跃游戏
- LeetCode 309. 最佳买卖股票时机含冷冻期
- LeetCode 406. 根据身高重建队列
二分
- LeetCode 33. 搜索旋转排序数组
- LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
递归&回溯
-
LeetCode 17. 电话号码的字母组合
-
LeetCode 22. 括号生成
-
LeetCode 39. 组合总和
-
LeetCode 46. 全排列
-
LeetCode 78. 子集
-
LeetCode 79. 单词搜索
-
LeetCode 226. 翻转二叉树
深度优先搜索DFS
-
LeetCode 236. 二叉树的最近公共祖先
-
LeetCode 301. 删除无效的括号
宽度优先搜索BFS
-
LeetCode 200. 岛屿数量
-
LeetCode 617. 合并二叉树
分治
- LeetCode 53. 最大子序和
排序算法
-
LeetCode 56. 合并区间
-
LeetCode 215. 数组中的第K个最大元素
-
LeetCode 347. 前 K 个高频元素
Manacher算法
-
LeetCode 5. 最长回文子串
-
LeetCode 647. 回文子串
字典树Trie
-
LeetCode 139. 单词拆分
-
LeetCode 208. 实现 Trie (前缀树)
动态规划
-
LeetCode 10. 正则表达式匹配
-
LeetCode 32. 最长有效括号
-
LeetCode 42. 接雨水
-
LeetCode 62. 不同路径
-
LeetCode 64. 最小路径和
-
LeetCode 70. 爬楼梯
-
LeetCode 72. 编辑距离
-
LeetCode 139. 单词拆分
-
LeetCode 152. 乘积最大子数组
-
LeetCode 198. 打家劫舍
-
LeetCode 221. 最大正方形
-
LeetCode 300. 最长递增子序列
-
LeetCode 337. 打家劫舍 III
-
LeetCode 416. 分割等和子集
-
LeetCode 494. 目标和
最短路算法
- LeetCode 743. 网络延迟时间
最小生成树
- 1584. 连接所有点的最小费用
拓扑排序
- LeetCode 207. 课程表
并查集
- LeetCode 399. 除法求值
还在不断完善中。
我把学习 算法和数据结构和计算机核心的书籍 都下面整理好了获取,在学习计算机的路上肯定能用到,身边的同学都在看。
书单
//mp.weixin.qq.com/s/vtIjAQQdEik2A7NCIamSqA
下面讲一下如何刷题。
如何正确的做一道题
- 从简入手: 先从简单暴力(时间复杂度高)的方法入手。
- 优化: 思考如何在第一步的基础上,如何优化算法,降低时间复杂度。
- 构思代码: 有了以上两步,我们此时应该已经有了一个正确的想法,此时我们应该构思代码,有那几部分,每部分实现什么功能,代码怎么写。而不是直接闷头去写代码,因为很多时候没想清楚,直接去写代码,会导致写了一半发现思路不对,写的代码都是错误的。
- 写代码: 实现第三步代码。
- (Debug): 如果我们的题目没有通过测试,应该检查代码是不是有bug、思路对不对等。
- 总结与反思: 题目通过了,我们应该总结一下这道题考察的知识点、切入的角度、同类型的题目等,同时思考有没有更优的办法。
做到以上几点,一道题学习的就很透了,遇到同类型的题目可以举一反三啦。
最后
我是编程熊,字节跳动、旷视科技前员工、ACM金牌选手。
微信搜索【一只编程熊】,获取 学习资源、面试、内推交流群。