Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
L

LeetCode-Solutions-in-Good-Style

> 编程语言
Open source

首页已经更新,希望能对大家有帮助。

2.8K stars0 likes0 views
WebsiteGitHub

About

首页已经更新,希望能对大家有帮助。

LeetCode-Solutions-in-Good-Style

说明:我和绝大多数同学一样,一边学习、一边总结。我会争取做更多的分享,给大家带来一些有用的知识,感谢大家一直以来的支持。

大家好,这里是一个《算法与数据结构》的入门级教程,适用于算法零基础和转行同学,不适合于准备算法竞赛。想传递的观点是:写逻辑清楚的代码,所以我写的代码一定经过了严格的思考,格式非常标准,不带有个人风格,不会为了缩减代码行数而少写一个空行和注释。在这里:

  • 特别感谢 @AbbyDeng 同学的更名建议;
  • 所有的代码都通过 LeetCode(力扣) 在线测评系统检测;
  • 如果大家有问题,可以给本项目提 Issues;
  • 本教程的目的是科普,帮助零基础和转行的朋友入门,养成正确的编写代码的习惯,所以不会花大量的时间和精力去研究一些比较偏门的算法和数据结构;
  • 这里是一点个人意见:对于绝大多数朋友来说,算法与数据结构很有用,但是做算法题可能没有那么有用。掌握一定的算法与数据结构的知识和思维角度是有用的,算法题可以帮助我们更加深刻的理解算法与数据结构的设计思想,但我们没有必要掌握一些可能现在用不到的算法与数据结构知识。所以很遗憾,我一定会有很多问题不会做,但我也不想把它们搞明白。如果大家提出的问题,特别是面试中遇到的问题,我不会就直接和大家说我不会了;
  • 建议安装 Octotree 插件,以获得最佳的阅读体验:

可以叫我 weiwei,在我力所能及且时间允许的情况下,我会尽可能回答我知道的问题。如果有不能及时回复的问题,可能是因为我没有看到站内通知,可以发邮件给我 [email protected] 。

我录制的视频题解

我从 2019 年 9 月开始录制视频题解。最开始的时候,我会对着要讲的材料录好几遍。现在讲解知识点的时候写逐字稿。已经沉淀了很多视频,其实也算是一个小小的体系课程,现在罗列在这里,希望能够对大家有所帮助。

0. 算法新手如何刷力扣(LeetCode)?【干货分享】

  • 视频:算法新手如何刷力扣(LeetCode)?【干货分享】

1. 时间复杂度与空间复杂度

  • 视频:时间复杂度与空间复杂度

这个视频提到了时间复杂度是一个渐进概念,需要用动态的角度去理解。并且讲解了时间复杂度的严格定义(极限形式),以便大家理解时间复杂度的计算规则。并且还指出了:时间复杂度不是程序的运行时间;应该使用「空间换时间」,更多关注在优化「时间复杂度」。

2. 二分查找

  • 视频:用「排除法」(减治思想)写二分查找问题

这个视频介绍了如何写对二分查找算法,二分查找的细节虽然多,但只要我们掌握了正确的解题思路,并且多加练习、勤于思考、多做总结,写对二分查找的问题就不再困难。

下面的视频讲解了几道二分查找的例题,我们重点分析了题意和如何利用题目中给出的条件逐渐缩小搜索区间。

题目链接 力扣 B 站
35. 搜索插入位置(简单) (空缺) B 站
34. 在排序数组中查找元素的第一个和最后一个位置(简单) 力扣 B 站
1095. 山脉数组中查找目标值(中等) 力扣 B 站
4. 寻找两个正序数组的中位数(困难) 力扣 B 站

我们通过「力扣」第 4 题(寻找两个正序数组的中位数)的分析,向大家介绍了这样的技巧:如果要找的目标元素的性质比较复杂,可以对这条性质取反,进而写出可以简单的可以缩减问题区间的逻辑语句。

3. 和排序相关的问题

「归并排序」和「快速排序」是非常重要的排序算法,深刻理解它们对于理解「递归」函数的运行机制有着非常大的帮助,同时它们也是「分治思想」的典型应用。「逆序对」和「荷兰国旗问题(颜色分类)」也是非常经典的算法问题。

题目链接 力扣 B 站
《剑指 Offer》 51. 数组中的逆序对(困难) 力扣 B 站
315. 计算右侧小于当前元素的个数(困难) 力扣 B 站

计算「逆序对」完全就是按照「归并排序」的思路而来。

题目链接 力扣 B 站
75. 颜色分类(中等) 力扣 B 站

在「颜色分类」问题的讲解中,我们向大家介绍了「循环不变量」,在编写代码的过程中,我们应该一直遵守所使用的变量的语义,在「程序执行前」「执行过程中」「执行结束」以后保持不变。遵守我们自己定义「循环不变量」是我们写对正确代码的重要方法。

题目链接 力扣 B 站
41. 缺失的第一个正数(困难) 力扣 B 站

「缺失的第一个正数」是一个经典的算法问题,用到的思想是「原地哈希」,可以理解为是「桶排序」算法的特殊应用:一个萝卜一个坑,一个桶里只存放一个元素。要和大家强调的是,可以这样做是和输入数组的元素的数值密切相关。

4. 滑动窗口

「滑动窗口」问题是典型的应用「循环不变量」解决的问题,比较考验我们编码和调试的能力。

题目链接 力扣 B 站
76. 最小覆盖子串(困难) 力扣 B 站
424. 替换后的最长重复字符(中等) 力扣 B 站
567. 字符串的排列(中等) 力扣 B 站
978. 最长湍流子数组(中等) 力扣 B 站
992. K 个不同整数的子数组(困难) 力扣 B 站

5. 栈相关的问题

使用「栈」解决的问题,需要我们通过具体例子,发现解决它们正好符合「后进先出」的规律:

  • 把暂时还不能确定结果的数据放入栈,把可以确定结果的数据从栈中拿出;
  • 很多数据结构恰好应用于这种「动态」处理问题的场景,而发挥出它们的应用价值。

掌握下面这两个问题,离不开对具体例子的研究,进而归纳出一般规律。

题目链接 力扣 B 站
84. 柱状图中最大的矩形(困难) 力扣 B 站
316. 去除重复字母(中等) 力扣 B 站

「栈」最为广泛的一种应用就是作为「递归」「深度优先遍历」「分治算法」的数据结构支持。

6. 并查集

「并查集」这个数据结构目前来说在面试中出现比较少,如果是准备算法面试的朋友,可以跳过。

题目链接 力扣 B 站
990. 等式方程的可满足性(中等) 力扣 B 站
399. 除法求值(中等) 力扣 B 站
959. 由斜杠划分区域(中等) 力扣 B 站
765. 情侣牵手(困难) 力扣 B 站
947. 移除最多的同行或同列石头(中等) 力扣 B 站
803. 打砖块(困难) 力扣 B 站
1202. 交换字符串中的元素(中等) 力扣 B 站
778. 水位上升的泳池中游泳(困难) 力扣 B 站

7. 树

树的问题很多都可以使用「深度优先遍历」或者「广度优先遍历」去做。

题目链接 力扣 B 站
105. 从前序与中序遍历序列构造二叉树(中等) 力扣 B 站

8. 回溯算法

「回溯算法」其实就是对题目中所蕴含的「树形结构」执行一次 深度优先遍历。做这一类问题,在草稿

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Javajavaleetcodepython

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言