algo-learn

  • 2022-12-14
  • 浏览 (662)

algo-learn

学习数据结构与算法的代码示例,目前提供 Java、Python、Go 支持(C++ 也慢慢开始了)。维护这个 Repository 的目的有两个:

  • 编程是一门实践的艺术,多多练习,多多思考,把这里列举的所有算法、数据结构,以及对应的常见 leetcode 习题都自己手敲几遍,增强自己的编码基本功,写出高质量的代码。

  • 同时也给刷题的朋友一些指导,面对 Leetcode 上千道题目,可能会觉得手足无措,想刷题但是又不知道从哪里开始。

这里记录的是我自己的刷题过程,基本上都是一些 easy 和 medium 的题目,并且分类详细,你可以参考这个顺序,然后有针对性的去刷题。

这些题目在面试中也是比较高频的,应对大多数面试已经是绰绰有余了。

Repo 逐步完善中,欢迎补充更多题目,以及贡献代码!

数组

  • 实现一个动态扩容的数组【JavaPythonGo

  • 常见 leetcode 练习题:

题号 题目名称 解题代码 难度
1 两数之和 JavaPythonGoC++ 简单
283 移动零 JavaPythonGoC++ 简单
217 存在重复元素 JavaPythonGoC++ 简单
219 存在重复元素 II JavaPythonGoC++ 简单
66 加一 JavaPythonGoC++ 简单
136 只出现一次的数字 JavaPythonGoC++ 简单
121 买卖股票的最佳时机 I JavaPythonGo 简单
122 买卖股票的最佳时机 II JavaPythonGo 简单
88 合并两个有序数组 JavaPythonGoC++ 简单
26 删除排序数组中的重复项 JavaPythonGoC++ 简单
118 杨辉三角 JavaPythonGoC++ 简单
169 多数元素 JavaPythonGoC++ 简单
15 三数之和 JavaPythonGoC++ 中等
189 旋转数组 JavaPythonGoC++ 中等
11 装水最多的容器 JavaPythonGoC++ 中等
48 旋转图像 JavaPythonGo 中等
384 打乱数组 JavaPythonGo 中等
36 有效的数独 JavaPythonGo 中等
73 矩阵置零 JavaPythonGo 中等
———————— ———————————————— —————————————— ————————

链表

题号 题目名称 解题代码 难度
206 反转链表 JavaPythonGoC++ 简单
160 相交链表 JavaPythonGoC++ 简单
141 环形链表 JavaPythonGoC++ 简单
876 链表的中间结点 JavaPythonGoC++ 简单
83 删除排序链表中的重复元素 JavaPythonGoC++ 简单
21 合并两个有序链表 JavaPythonGoC++ 简单
234 回文链表 JavaPythonGoC++ 简单
142 环形链表II JavaPythonGoC++ 中等
19 删除链表倒数第 N 个节点 JavaPythonGoC++ 中等
24 两两交换链表节点 JavaPythonGoC++ 中等
328 奇偶链表 JavaPythonGoC++ 中等
2 两数相加 JavaPythonGoC++ 中等
445 两数相加ii Java、Python、GoC++ 中等
148 排序链表 Java、Python、Go、C++ 中等
合并 k 个升序链表
25 k 个一组翻转链表 JavaPythonGo 困难
———————— —————————————— ———————————————— ————————

  • 使用数组实现一个栈【JavaPythonGo
  • 实现链表实现一个栈【JavaPythonGo
  • 常见 Leetcode 练习题
题号 题目名称 解题代码 难度
20 有效的括号 JavaPythonGo、C++ 简单
155 最小栈 JavaPythonGoC++ 简单
232 用栈实现队列 JavaPythonGoC++ 简单
496 下一个更大元素 I JavaPythonGo 简单
856 括号的分数 Java、PythonGo 中等
84 柱状图中最大的矩形 Java、Python、Go 困难
———————— ———————————————— —————————————— ————————

队列

  • 使用数组实现一个队列【JavaPythonGo
  • 使用链表实现一个队列【JavaPythonGo
  • 实现一个循环队列【Java、Python、Go
  • 常见 Leetcode 练习题
题号 题目名称 解题代码 难度
225 使用队列实现栈 JavaPythonGo 简单
641 设计循环双端队列 Java、Python、Go 中等
622 设计循环队列 Java、Python、Go 中等
239 滑动窗口的最大值 JavaPythonGo 困难
———————— —————————————— —————————————— ————————

字符串

  • 字符串匹配算法:
    • BF 算法【Java、Python、Go】
    • RK 算法【Java、Python、Go】
    • BM 算法【Java、Python、Go】
    • KMP 算法【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、PythonGo 简单
680 验证回文字符串 Ⅱ Java、Python、Go 简单
28 实现 strStr() Java、Python、Go 简单
14 最长公共前缀 Java、PythonGo 简单
8 字符串转换整数 Java、Python、Go 中等
438 找到字符串中所有字母异位词 Java、Python、Go 中等
151 翻转字符串里的单词 JavaPython、Go 中等
557 反转字符串中的单词 III Java、Python、Go 简单
38 外观数列 Java、Python、Go 中等
———————— —————————————— ———————————————— ————————

哈希表

  • 实现一个简单的哈希表【Java、Python、Go】
  • 用哈希表和双向链表实现一个 Lru Cache【Java、Python、Go】
  • 常见 Leetcode 练习题
题号 题目名称 解题代码 难度
349 求两个数组的交集 JavaPythonGo 简单
350 求两个数组的交集II JavaPythonGo 简单
242 有效的字母异位词 JavaPythonGo 简单
771 宝石与石头 Java、PythonGo 简单
49 字母异位词分组 JavaPythonGo 中等
438 找到字符串中所有字母异位词 JavaPython、Go 中等
146 实现 lru 缓存 Java、Python、Go 中等
380 常数时间插入、删除和获取随机元素 JavaPythonGo 中等
———————— ———————————————— —————————————— ————————

布隆过滤器

并查集

  • 并查集的基本代码模板【Java、Python、Go】

  • 常见 leetcode 练习题

题号 题目名称 解题代码 难度
547 朋友圈 JavaPythonGo 中等
200 岛屿数量 Java、PythonGo 中等
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 二叉树的中序遍历 JavaPythonGo 中等
145 二叉树的后序遍历 Java、PythonGo 中等
102 二叉树的层次遍历 Java、PythonGo 中等
107 二叉树的层次遍历 II Java、Python、Go、C++ 简单
637 二叉树的层平均值 Java、Python、Go 简单
103 二叉树的锯齿形层次遍历 JavaPython、Go 中等
199 二叉树的右视图 Java、Python、Go、C++ 中等
104 二叉树的最大深度 Java、PythonGo、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 困难
———————— ———————————————— —————————————— ————————

你可能感兴趣的文章

contains_duplicate

container_with_most_water

contains_duplicate_ii

0  赞