algo-learn
algo-learn
学习数据结构与算法的代码示例,目前提供 Java、Python、Go 支持(C++ 也慢慢开始了)。维护这个 Repository 的目的有两个:
编程是一门实践的艺术,多多练习,多多思考,把这里列举的所有算法、数据结构,以及对应的常见 leetcode 习题都自己手敲几遍,增强自己的编码基本功,写出高质量的代码。
同时也给刷题的朋友一些指导,面对 Leetcode 上千道题目,可能会觉得手足无措,想刷题但是又不知道从哪里开始。
这里记录的是我自己的刷题过程,基本上都是一些 easy 和 medium 的题目,并且分类详细,你可以参考这个顺序,然后有针对性的去刷题。
这些题目在面试中也是比较高频的,应对大多数面试已经是绰绰有余了。
Repo 逐步完善中,欢迎补充更多题目,以及贡献代码!
数组
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
1 | 两数之和 | Java、Python、Go、C++ | 简单 |
283 | 移动零 | Java、Python、Go、C++ | 简单 |
217 | 存在重复元素 | Java、Python、Go、C++ | 简单 |
219 | 存在重复元素 II | Java、Python、Go、C++ | 简单 |
66 | 加一 | Java、Python、Go、C++ | 简单 |
136 | 只出现一次的数字 | Java、Python、Go、C++ | 简单 |
121 | 买卖股票的最佳时机 I | Java、Python、Go | 简单 |
122 | 买卖股票的最佳时机 II | Java、Python、Go | 简单 |
88 | 合并两个有序数组 | Java、Python、Go、C++ | 简单 |
26 | 删除排序数组中的重复项 | Java、Python、Go、C++ | 简单 |
118 | 杨辉三角 | Java、Python、Go、C++ | 简单 |
169 | 多数元素 | Java、Python、Go、C++ | 简单 |
15 | 三数之和 | Java、Python、Go、C++ | 中等 |
189 | 旋转数组 | Java、Python、Go、C++ | 中等 |
11 | 装水最多的容器 | Java、Python、Go、C++ | 中等 |
48 | 旋转图像 | Java、Python、Go | 中等 |
384 | 打乱数组 | Java、Python、Go | 中等 |
36 | 有效的数独 | Java、Python、Go | 中等 |
73 | 矩阵置零 | Java、Python、Go | 中等 |
———————— | ———————————————— | —————————————— | ———————— |
链表
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
206 | 反转链表 | Java、Python、Go、C++ | 简单 |
160 | 相交链表 | Java、Python、Go、C++ | 简单 |
141 | 环形链表 | Java、Python、Go、C++ | 简单 |
876 | 链表的中间结点 | Java、Python、Go、C++ | 简单 |
83 | 删除排序链表中的重复元素 | Java、Python、Go、C++ | 简单 |
21 | 合并两个有序链表 | Java、Python、Go、C++ | 简单 |
234 | 回文链表 | Java、Python、Go、C++ | 简单 |
142 | 环形链表II | Java、Python、Go、C++ | 中等 |
19 | 删除链表倒数第 N 个节点 | Java、Python、Go、C++ | 中等 |
24 | 两两交换链表节点 | Java、Python、Go、C++ | 中等 |
328 | 奇偶链表 | Java、Python、Go、C++ | 中等 |
2 | 两数相加 | Java、Python、Go、C++ | 中等 |
445 | 两数相加ii | Java、Python、Go、C++ | 中等 |
148 | 排序链表 | Java、Python、Go、C++ | 中等 |
合并 k 个升序链表 | |||
25 | k 个一组翻转链表 | Java、Python、Go | 困难 |
———————— | —————————————— | ———————————————— | ———————— |
栈
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
20 | 有效的括号 | Java、Python、Go、C++ | 简单 |
155 | 最小栈 | Java、Python、Go、C++ | 简单 |
232 | 用栈实现队列 | Java、Python、Go、C++ | 简单 |
496 | 下一个更大元素 I | Java、Python、Go | 简单 |
856 | 括号的分数 | Java、Python、Go | 中等 |
84 | 柱状图中最大的矩形 | Java、Python、Go | 困难 |
———————— | ———————————————— | —————————————— | ———————— |
队列
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
225 | 使用队列实现栈 | Java、Python、Go | 简单 |
641 | 设计循环双端队列 | Java、Python、Go | 中等 |
622 | 设计循环队列 | Java、Python、Go | 中等 |
239 | 滑动窗口的最大值 | Java、Python、Go | 困难 |
———————— | —————————————— | —————————————— | ———————— |
字符串
- 字符串匹配算法:
- 常见 leetcode 练习题
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
344 | 反转字符串 | Java、Python、Go | 简单 |
709 | 转换成小写字母 | Java、Python、Go | 简单 |
58 | 最后一个单词的长度 | Java、Python、Go | 简单 |
541 | 反转字符串 II | Java、Python、Go | 简单 |
7 | 整数反转 | Java、Python、Go | 简单 |
917 | 仅仅反转字母 | Java、Python、Go | 简单 |
205 | 同构字符串 | Java、Python、Go | 简单 |
387 | 字符串中的第一个唯一字符 | Java、Python、Go | 简单 |
125 | 验证回文串 | Java、Python、Go | 简单 |
680 | 验证回文字符串 Ⅱ | Java、Python、Go | 简单 |
28 | 实现 strStr() | Java、Python、Go | 简单 |
14 | 最长公共前缀 | Java、Python、Go | 简单 |
8 | 字符串转换整数 | Java、Python、Go | 中等 |
438 | 找到字符串中所有字母异位词 | Java、Python、Go | 中等 |
151 | 翻转字符串里的单词 | Java、Python、Go | 中等 |
557 | 反转字符串中的单词 III | Java、Python、Go | 简单 |
38 | 外观数列 | Java、Python、Go | 中等 |
———————— | —————————————— | ———————————————— | ———————— |
哈希表
- 实现一个简单的哈希表【Java、Python、Go】
- 用哈希表和双向链表实现一个 Lru Cache【Java、Python、Go】
- 常见 Leetcode 练习题
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
349 | 求两个数组的交集 | Java、Python、Go | 简单 |
350 | 求两个数组的交集II | Java、Python、Go | 简单 |
242 | 有效的字母异位词 | Java、Python、Go | 简单 |
771 | 宝石与石头 | Java、Python、Go | 简单 |
49 | 字母异位词分组 | Java、Python、Go | 中等 |
438 | 找到字符串中所有字母异位词 | Java、Python、Go | 中等 |
146 | 实现 lru 缓存 | Java、Python、Go | 中等 |
380 | 常数时间插入、删除和获取随机元素 | Java、Python、Go | 中等 |
———————— | ———————————————— | —————————————— | ———————— |
布隆过滤器
并查集
并查集的基本代码模板【Java、Python、Go】
常见 leetcode 练习题
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
547 | 朋友圈 | Java、Python、Go | 中等 |
200 | 岛屿数量 | Java、Python、Go | 中等 |
120 | 被围绕的区域 | Java、Python、Go | 中等 |
———————— | ———————————————— | —————————————— | ———————— |
二叉堆
- 实现一个二叉堆【Java、Python、Go】
- 常见 leetcode 练习题
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
剑指 Offer 40 | 最小的 k 的元素 | Java、Python、Go | 简单 |
703 | 数据流中的第 k 大元素 | Java、Python、Go | 简单 |
347 | 前 k 个高频元素 | Java、Python、Go | 中等 |
215 | 数组中第 k 个最大元素 | Java、Python、Go | 中等 |
239 | 滑动窗口的最大值 | Java、Python、Go | 困难 |
———————— | ———————————————— | ———————————————— | ———————— |
树
1. 二叉树
- 实现一个二叉搜索树【Java、Python、Go】
- 常见 leetcode 练习题:
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
144 | 二叉树的前序遍历 | Java、Python、Go | 中等 |
94 | 二叉树的中序遍历 | Java、Python、Go | 中等 |
145 | 二叉树的后序遍历 | Java、Python、Go | 中等 |
102 | 二叉树的层次遍历 | Java、Python、Go | 中等 |
107 | 二叉树的层次遍历 II | Java、Python、Go、C++ | 简单 |
637 | 二叉树的层平均值 | Java、Python、Go | 简单 |
103 | 二叉树的锯齿形层次遍历 | Java、Python、Go | 中等 |
199 | 二叉树的右视图 | Java、Python、Go、C++ | 中等 |
104 | 二叉树的最大深度 | Java、Python、Go、C++ | 简单 |
559 | N 叉树的最大深度 | Java、Python、Go、C++ | 简单 |
111 | 二叉树的最小深度 | Java、Python、Go、C++ | 简单 |
662 | 二叉树最大宽度 | Java、Python、Go、C++ | 中等 |
230 | 二叉搜索树中第 K 小元素 | Java、Python、Go | 中等 |
98 | 验证二叉搜索树 | Java、Python、Go | 中等 |
101 | 对称二叉树 | Java、Python、Go | 简单 |
112 | 路径总和 | Java、Python、Go、C++ | 简单 |
108 | 有序数组转换为二叉搜索树 | Java、Python、Go | 简单 |
129 | 求根到叶子节点数字之和 | Java、Python、Go | 中等 |
116 | 填充每个节点的下一个右侧节点指针 | Java、Python、Go | 中等 |
105 | 从前序与中序遍历序列构造二叉树 | Java、Python、Go、C++ | 中等 |
589 | N叉树的前序遍历 | Java、Python、Go | 简单 |
590 | N叉树的后序遍历 | Java、Python、Go | 简单 |
429 | N叉树的层次遍历 | Java、Python、Go | 中等 |
226 | 翻转二叉树 | Java、Python、Go、C++ | 简单 |
———————— | —————————————— | ———————————————— | ———————— |
2. 字典树
- 实现一个字典树【Java、Python、Go】
- 常见 leetcode 练习题
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
208 | 实现一个 Trie (字典树) | Java、Python、Go | 中等 |
212 | 单词搜索II | Java、Python、Go | 困难 |
———————— | —————————————— | ———————————————— | ———————— |
排序和搜索
1. 排序
- 冒泡排序【Java、Python、Go】
- 选择排序【Java、Python、Go】
- 插入排序【Java、Python、Go】
- 希尔排序【Java、Python、Go】
- 归并排序【Java、Python、Go】
- 快速排序【Java、Python、Go】
- 堆排序【Java、Python、Go】
- 桶排序【Java、Python、Go】
- 计数排序【Java、Python、Go】
- 基数排序【Java、Python、Go】
- 常见 leetcode 练习题
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
颜色排序 | Java、Python、Go | 简单 | |
1122 | 数组的相对排序 | Java、Python、Go | 简单 |
242 | 有效的字母异位词 | Java、Python、Go | 简单 |
56 | 合并区间 | Java、Python、Go | 中等 |
493 | 翻转对 | Java、Python、Go | 困难 |
———————— | ———————————————— | —————————————— | ———————— |
2. 二分查找
- 实现二分查找的标准代码模板【Java、Python、Go、C++】
- 常见 leetcode 练习题:
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
278 | 第一个错误的版本 | Java、Python、Go、C++ | 简单 |
367 | 有效的完全平方数 | Java、Python、Go、C++ | 简单 |
69 | x 的平方根 | Java、Python、Go、C++ | 简单 |
162 | 寻找峰值 | Java、Python、Go、C++ | 中等 |
34 | 在排序数组中查找元素的第一个和最后一个位置 | Java、Python、Go、C++ | 中等 |
33 | 搜索旋转排序数组 | Java、Python、Go、C++ | 中等 |
153 | 搜索旋转排序数组中的最小值 | Java、Python、Go、C++ | 中等 |
540 | 有序数组中的单一元素 | Java、Python、Go、C++ | 中等 |
———————— | ———————————————— | ———————————————— | ———————— |
3. 搜索
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
127 | 单词接龙 | Java、Python、Go | 中等 |
朋友圈 | |||
岛屿数量 | |||
433 | 最小基因变化 | Java、Python、Go | 中等 |
———————— | —————————————— | ———————————————— | ———————— |
算法思想
1. 贪心
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
分糖果 | Java、Python、Go | 中等 | |
跳跃游戏 | Java、Python、Go | 中等 | |
跳跃游戏II | Java、Python、Go | 困难 | |
———————— | —————————————— | ———————————————— | ———————— |
2. 回溯
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
79 | 单词搜索 | Java、Python、Go | 中等 |
22 | 括号生成 | Java、Python、Go | 中等 |
全排列 | |||
全排列II | |||
子集 | |||
547 | 朋友圈 | Java、Python、Go | 中等 |
N 皇后 | Java、Python、Go | 困难 | |
52 | N 皇后 II | Java、Python、Go | 困难 |
———————— | —————————————— | ———————————————— | ———————— |
3. 分治
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
50 | Pow(x, n) | Java、Python、Go | 中等 |
———————— | —————————————— | ———————————————— | ———————— |
4. 动态规划
题号 | 题目名称 | 解题代码 | 难度 |
---|---|---|---|
爬楼梯 | |||
746 | 使用最小花费爬楼梯 | Java、Python、Go | 简单 |
53 | 最大子序和 | Java、Python、Go | 简单 |
三角形的最短路径和 | |||
64 | 最小路径和 | Java、Python、Go | 中等 |
62 | 不同路径 | Java、Python、Go | 中等 |
63 | 不同路径II | Java、Python、Go | 中等 |
乘积最大子数组 | Java、Python、Go | ||
1143 | 最长公共子序列 | Java、Python、Go | 中等 |
583 | 两个字符串的删除操作 | Java、Python、Go | 中等 |
300 | 最长上升子序列 | Java、Python、Go | 中等 |
最大正方形 | Java、Python、Go | ||
198 | 打家劫舍 | Java、Python、Go | 简单 |
打家劫舍II | Java、Python、Go | ||
按摩师 | Java、Python、Go | 简单 | |
91 | 解码方法 | Java、Python、Go | 中等 |
72 | 编辑距离 | Java、Python、Go | 困难 |
———————— | ———————————————— | —————————————— | ———————— |
你可能感兴趣的文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦