algo-learn

2022-12-14 浏览 (872)

algo-learn

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

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

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

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

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

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

数组

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

  • 常见 leetcode 练习题:

题号题目名称解题代码难度
1两数之和JavaPythonGoC++简单
283移动零JavaPythonGoC++简单
217存在重复元素JavaPythonGoC++简单
219存在重复元素 IIJavaPythonGoC++简单
66加一JavaPythonGoC++简单
136只出现一次的数字JavaPythonGoC++简单
121买卖股票的最佳时机 IJavaPythonGo简单
122买卖股票的最佳时机 IIJavaPythonGo简单
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环形链表IIJavaPythonGoC++中等
19删除链表倒数第 N 个节点JavaPythonGoC++中等
24两两交换链表节点JavaPythonGoC++中等
328奇偶链表JavaPythonGoC++中等
2两数相加JavaPythonGoC++中等
445两数相加iiJava、Python、GoC++中等
148排序链表Java、Python、Go、C++中等
合并 k 个升序链表
25k 个一组翻转链表JavaPythonGo困难
——————————————————————————————————————————————

  • 使用数组实现一个栈【JavaPythonGo
  • 实现链表实现一个栈【JavaPythonGo
  • 常见 Leetcode 练习题
题号题目名称解题代码难度
20有效的括号JavaPythonGo、C++简单
155最小栈JavaPythonGoC++简单
232用栈实现队列JavaPythonGoC++简单
496下一个更大元素 IJavaPythonGo简单
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反转字符串 IIJava、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反转字符串中的单词 IIIJava、Python、Go简单
38外观数列Java、Python、Go中等
——————————————————————————————————————————————

哈希表

  • 实现一个简单的哈希表【Java、Python、Go】
  • 用哈希表和双向链表实现一个 Lru Cache【Java、Python、Go】
  • 常见 Leetcode 练习题
题号题目名称解题代码难度
349求两个数组的交集JavaPythonGo简单
350求两个数组的交集IIJavaPythonGo简单
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二叉树的层次遍历 IIJava、Python、Go、C++简单
637二叉树的层平均值Java、Python、Go简单
103二叉树的锯齿形层次遍历JavaPython、Go中等
199二叉树的右视图Java、Python、Go、C++中等
104二叉树的最大深度Java、PythonGo、C++简单
559N 叉树的最大深度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++中等
589N叉树的前序遍历Java、Python、Go简单
590N叉树的后序遍历Java、Python、Go简单
429N叉树的层次遍历Java、Python、Go中等
226翻转二叉树Java、Python、Go、C++简单
——————————————————————————————————————————————

2. 字典树

  • 实现一个字典树【Java、Python、Go】
  • 常见 leetcode 练习题
题号题目名称解题代码难度
208实现一个 Trie (字典树)Java、Python、Go中等
212单词搜索IIJava、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++简单
69x 的平方根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中等
跳跃游戏IIJava、Python、Go困难
——————————————————————————————————————————————

2. 回溯

题号题目名称解题代码难度
79单词搜索Java、Python、Go中等
22括号生成Java、Python、Go中等
全排列
全排列II
子集
547朋友圈Java、Python、Go中等
N 皇后Java、Python、Go困难
52N 皇后 IIJava、Python、Go困难
——————————————————————————————————————————————

3. 分治

题号题目名称解题代码难度
50Pow(x, n)Java、Python、Go中等
——————————————————————————————————————————————

4. 动态规划

题号题目名称解题代码难度
爬楼梯
746使用最小花费爬楼梯Java、Python、Go简单
53最大子序和Java、Python、Go简单
三角形的最短路径和
64最小路径和Java、Python、Go中等
62不同路径Java、Python、Go中等
63不同路径IIJava、Python、Go中等
乘积最大子数组Java、Python、Go
1143最长公共子序列Java、Python、Go中等
583两个字符串的删除操作Java、Python、Go中等
300最长上升子序列Java、Python、Go中等
最大正方形Java、Python、Go
198打家劫舍Java、Python、Go简单
打家劫舍IIJava、Python、Go
按摩师Java、Python、Go简单
91解码方法Java、Python、Go中等
72编辑距离Java、Python、Go困难
——————————————————————————————————————————————

你可能感兴趣的文章

contains_duplicate

container_with_most_water

contains_duplicate_ii

  • 所属分类: 后端技术
  • 本文标签: 技术
  • 版权声明: 本文链接 https://seaxiang.com/blog/5672746775a640448472585a0f6f6ee8