Skip to content

学习数据结构与算法的代码示例,目前提供 Java、Python、Go 三种语言支持

License

Notifications You must be signed in to change notification settings

shijieqin/algo-learn

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

algo-learn

学习数据结构与算法的代码示例,目前提供 Java、Python、Go 三种语言支持。编程是一门实践的手艺,多多练习,多多思考,把这里列举的所有算法,数据结构,以及对应的常见 leetcode 习题都自己手敲几遍,增强自己的编码基本功,写出高性能和高质量的代码!

数组

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

  • 常见 leetcode 练习题:

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

链表

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

  • 使用数组实现一个栈【JavaPythonGo
  • 实现链表实现一个栈【JavaPythonGo
  • 常见 Leetcode 练习题
题号 题目名称 解题代码 难度
20 有效的括号 JavaPythonGo 简单
155 最小栈 JavaPythonGo 简单
232 用栈实现队列 JavaPythonGo 简单
496 下一个更大元素 I Java、Python、Go 简单
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 简单
637 二叉树的层平均值 Java、Python、Go 简单
103 二叉树的锯齿形层次遍历 JavaPython、Go 中等
104 二叉树的最大深度 Java、PythonGo 简单
111 二叉树的最小深度 Java、Python、Go 简单
230 二叉搜索树中第 K 小元素 Java、Python、Go 中等
98 验证二叉搜索树 Java、Python、Go 中等
101 对称二叉树 Java、Python、Go 简单
112 路径总和 Java、Python、Go 简单
108 有序数组转换为二叉搜索树 Java、Python、Go 简单
129 求根到叶子节点数字之和 Java、Python、Go 中等
116 填充每个节点的下一个右侧节点指针 Java、Python、Go 中等
105 从前序与中序遍历序列构造二叉树 Java、Python、Go 中等
589 N叉树的前序遍历 Java、Python、Go 简单
590 N叉树的后序遍历 Java、Python、Go 简单
429 N叉树的层次遍历 Java、Python、Go 中等
———————— —————————————— ———————————————— ————————

2. 字典树

  • 实现一个字典树
  • 常见 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. 二分查找

  • 实现二分查找的标准代码模板
  • 常见 leetcode 练习题:
题号 题目名称 解题代码 难度
第一个错误的版本 Java、Python、Go 简单
有效的完全平方数 Java、Python、Go 简单
69 x 的平方根 Java、Python、Go 简单
162 寻找峰值 Java、Python、Go 中等
34 在排序数组中查找元素的第一个和最后一个位置 Java、Python、Go 中等
33 搜索旋转排序数组 Java、Python、Go 中等
———————— ———————————————— ———————————————— ————————

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 困难
———————— ———————————————— —————————————— ————————

About

学习数据结构与算法的代码示例,目前提供 Java、Python、Go 三种语言支持

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 53.0%
  • Go 25.0%
  • Python 22.0%