- 说明一下
最近入职新公司,要学习的东西很多,比较忙,所以暂时中断了更新,挺过了这段时间后面会慢慢补上,这仓库没有废弃~
码字不易,如果觉得有帮助,请点个 star
哈~
这个项目主要是 Java 学习笔记,内容包括 JVM、框架、趣谈 Java 系列、剑指offer题解、leetcode 题解、设计模式等。
目前只更新了部分内容 ,我会一到两天更新一次,目前在更新。现阶段主要将精力放在数据结构与算法上面,所以目前主要在更 leetcode题解
和剑指offer题解
部分。
如果觉得可以,请点个 star 关注哦,谢谢各位小哥哥、小姐姐~
📝 | ☕ | 📓 | 🍎 | 🚏 | 📚 | 🔧 | 🔍 |
---|---|---|---|---|---|---|---|
ARTS | 趣谈Java | JVM | 数据结构与算法 | 框架 | 书籍 | 工具 | Lambda |
Algorithm:每周至少做一个leetcode的算法题;
Review:阅读并点评至少一篇英文技术文章;
Tip/Techni:学习至少一个技术技巧;
Share:分享一篇有观点和思考的技术文章。
- 趣谈Java之——与对象的初次约会
- 趣谈Java之——UML中类(对象)之间的几种关系
- 趣谈Java之——三分钟搞懂基础语法
- 趣谈Java之——Java便利贴之泛型
- 趣谈Java之——深入理解Java的三大特性之多态
- 趣谈Java之——优雅性感之 JSON 小姐姐
- 趣谈Java之——抽象类和接口的异同、区别
关于数据结构和算法,肯定有不少人会觉得反正工作中用不到,没必要花费那么大精力来学习。可真是如此吗?难道你真的愿意做一辈子的 CRUD BOY 吗?
那为什么要学习数据结构和算法呢?主要有以下几点:
- 直接好处是学好数据结构和算法,我们能够写出性能更优的代码;
- 算法是一种解决问题的思路,它与我们的生活和事业息息相关;
- 长期来看,大脑思考能力是个人最重要的核心竞争力,而算法是为数不多的能够锻炼大脑思考能力的方式之一;
- 基础知识就像一幢大楼的根基,它决定了我们的技术高度,而算法正是我们攀爬技术高峰不可或缺的基础之一。
说了这么多,还有各种理由抬杠,不愿意花费精力学习数据和算法的人,那也没办法,没啥好说的,懂的自然懂。
在这里我会将学习的每个数据结构和算法的理论基础的总结以及代码放在理论基础目录下面,而刷的 leetcode 的题目我也会将详细的解题思路和时间复杂度、空间复杂度写出来,具体可以点开每道题对应的答案链接查看。
复杂度分析 | 数组 | 链表 | 栈 | 队列 | 跳表 | 散列表 | 二叉树 |
---|---|---|---|---|---|---|---|
⭐⭐⭐ | ️⭐⭐⭐ | ⭐⭐⭐ | ⭐ | ️⭐ | ⭐ | ️⭐⭐ | ️⭐⭐⭐ |
贪心 | 分治 | 回溯 | 动态规划 | 递归 | 二分查找 | 排序 | 图 |
️⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | ️⭐⭐⭐ | ️⭐⭐⭐ | ⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
以下我会分门别类地整理一些面试中高频出现的算法题,并逐步去实现,实现后的答案链接会放在表格中,其中❎表示尚未完成,✅表示已经完成。
特别感谢:初始表格题目参考来源 https://github.com/gaoshengnan/LeetCode ,感谢 Github 用户 gaoshengnan 所整理的初始版本的
100
道题,题库会在此基础上慢慢扩展。
数组-Array | ||||
---|---|---|---|---|
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
11 | 中等 | 盛最多水的容器 | ContainerWithMostWater | ✅ |
26 | 简单 | 删除排序数组中重复项 | RemoveDuplicatesfromSortedArray | ✅ |
66 | 简单 | 加一 | PlusOne | ✅ |
70 | 简单 | 爬楼梯 | ClimbingStairs | ✅ |
88 | 简单 | 合并两个有序数组 | MergeSortedArray | ✅ |
189 | 简单 | 旋转数组 | RotateArray | ✅ |
283 | 简单 | 移动零 | MoveZeroes | ✅ |
链表-LinkedList | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
21 | 简单 | 合并两个有序链表 | MergeTwoSortedLists | ✅ |
24 | 中等 | 两两交换链表中的节点 | ❎ | |
25 | 困难 | K 个一组翻转链表 | ❎ | |
141 | 简单 | 环形链表 | LinkedListCycle | ✅ |
142 | 中等 | 环形链表II | Linked List Cycle II | ✅ |
206 | 简单 | 反转链表 | ReverseLinkedList | ✅ |
其他实战题目 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
1 | 简单 | 两数之和 | TwoSum | ✅ |
167 | 简单 | 两数之和 II - 输入有序数组 | TwoSumII | ✅ |
15 | 中等 | 三数之和 | ThreeSum | ✅ |
20 | 简单 | 有效的括号 | ❎ | |
42 | 困难 | 接雨水 | ❎ | |
49 | 中等 | 字母异位词分组 | ❎ | |
84 | 困难 | 柱状图中最大的矩形 | ❎ | |
155 | 简单 | 最小栈 | ❎ | |
239 | 困难 | 滑动窗口最大值 | ❎ | |
242 | 简单 | 有效的字母异位词 | ❎ | |
641 | 中等 | 设计循环双端队列 | ❎ | |
二叉树-Binary Tree | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
22 | 中等 | 括号生成 | ❎ | |
94 | 中等 | 二叉树的中序遍历 | ❎ | |
98 | 中等 | 验证二叉搜索树 | ❎ | |
104 | 简单 | 二叉树的最大深度 | ❎ | |
105 | 中等 | 从前序与中序遍历序列构造二叉树 | ❎ | |
111 | 简单 | 二叉树的最小深度 | ❎ | |
144 | 中等 | 二叉树的前序遍历 | ❎ | |
226 | 简单 | 翻转二叉树 | ❎ | |
230 | 中等 | 二叉搜索树中第K小的元素 | ❎ | |
236 | 中等 | 二叉树的最近公共祖先 | ❎ | |
297 | 困难 | 二叉树的序列化与反序列化 | ❎ | |
429 | 简单 | N叉树的层序遍历 | ❎ | |
589 | 简单 | N叉树的前序遍历 | ❎ | |
590 | 简单 | N叉树的后序遍历 | ❎ | |
分治 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
17 | 中等 | 电话号码的字母组合 | ❎ | |
50 | 中等 | Pow(x, n) | ❎ | |
78 | 中等 | 子集 | ❎ | |
169 | 简单 | 求众数 | ❎ | |
二分查找 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
33 | 中等 | 搜索旋转排序数组 | Search in Rotated Sorted Array | ✅ |
69 | 简单 | x 的平方根 | ❎ | |
367 | 简单 | 有效的完全平方数 | ❎ | |
并查集 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
130 | 中等 | 被围绕的区域 | ❎ | |
200 | 中等 | 岛屿数量 | ❎ | |
547 | 中等 | 朋友圈 | ❎ | |
遍历和搜索 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
102 | 中等 | 二叉树的层次遍历 | ❎ | |
126 | 困难 | 单词接龙 II | ❎ | |
127 | 中等 | 单词接龙 | ❎ | |
433 | 中等 | 最小基因变化 | ❎ | |
515 | 中等 | 在每个树行中找最大值 | ❎ | |
529 | 中等 | 扫雷游戏 | ❎ | |
动态规划 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
32 | 中等 | 最长有效括号 | ❎ | |
45 | 困难 | 跳跃游戏 II | ❎ | |
55 | 困难 | 跳跃游戏 | ❎ | |
62 | 中等 | 不同路径 | ❎ | |
63 | 中等 | 不同路径 II | ❎ | |
64 | 中等 | 最小路径和 | ❎ | |
72 | 困难 | 编辑距离 | ❎ | |
76 | 困难 | 最小覆盖子串 | ❎ | |
91 | 中等 | 解码方法 | ❎ | |
120 | 中等 | 三角形最小路径和 | ❎ | |
121 | 简单 | 买卖股票的最佳时机 | ❎ | |
122 | 简单 | 买卖股票的最佳时机 II | ❎ | |
123 | 困难 | 买卖股票的最佳时机 III | ❎ | |
152 | 中等 | 乘积最大子序列 | ❎ | |
188 | 困难 | 买卖股票的最佳时机 IV | ❎ | |
198 | 简单 | 打家劫舍 | ❎ | |
213 | 中等 | 打家劫舍 II | ❎ | |
221 | 中等 | 最大正方形 | ❎ | |
279 | 中等 | 完全平方数 | ❎ | |
322 | 中等 | 零钱兑换 | ❎ | |
518 | 中等 | 零钱兑换 II | ❎ | |
309 | 中等 | 最佳买卖股票时机含冷冻期 | ❎ | |
312 | 困难 | 戳气球 | ❎ | |
363 | 困难 | 矩形区域不超过 K 的最大数值和 | ❎ | |
403 | 困难 | 青蛙过河 | ❎ | |
410 | 困难 | 分割数组的最大值 | ❎ | |
552 | 困难 | 学生出勤记录 II | ❎ | |
621 | 中等 | 任务调度器 | ❎ | |
647 | 中等 | 回文子串 | ❎ | |
714 | 中等 | 买卖股票的最佳时机含手续费 | ❎ | |
980 | 困难 | 不同路径 III | ❎ | |
剪枝 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
36 | 中等 | 有效的数独 | ❎ | |
37 | 困难 | 解数独 | ❎ | |
51 | 困难 | N皇后 | ❎ | |
贪心算法 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
455 | 简单 | 分发饼干 | ❎ | |
860 | 简单 | 柠檬水找零 | ❎ | |
874 | 简单 | 模拟行走机器人 | ❎ | |
trie树 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
208 | 中等 | 实现 Trie (前缀树) | ❎ | |
212 | 困难 | 单词搜索 II | ❎ | |
位运算 | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
52 | 困难 | N皇后 II | ❎ | |
190 | 简单 | 颠倒二进制位 | ❎ | |
191 | 简单 | 位1的个数 | ❎ | |
231 | 简单 | 2的幂 | ❎ | |
338 | 中等 | 比特位计数 | ❎ | |
LRU Catch | ||||
题号 | 难度 | 题目链接 | 答案链接 | 是否完成 |
146 | 困难 | LRU缓存机制 | ❎ |
- 剑指offer题解(Java实现)—— 面试题2:实现Singleton模式
- 剑指offer题解(Java实现)—— 面试题3:数组中重复的数字
- 剑指offer题解(Java实现)—— 面试题4:二维数组中的查找
- 剑指offer题解(Java实现)—— 面试题5:替换空格
- 剑指offer题解(Java实现)—— 面试题6:从头到尾打印链表
- 剑指offer题解(Java实现)—— 面试题7:重建二叉树
- 有关框架的面试题部分,放在了另一个专门整理和总结面试题的仓库:https://github.com/bigrotor187/awesome-java-interview