如果满分 100 分,无论你的基础如何,本站都可以在最短的时间内帮你提升至 85 分的水平。

因为本站教的是模板化、框架化的思维模式,所以你练成的这个 85 分是可以隔绝运气,稳定复现的。也就是说难度小于 85 的题目,你一定能按部就班地做出来,难度大于 85 的题目,才依赖灵感和运气。

85 分是什么概念?

对比参考一下,假设你大学学计算机专业,上过学校开设的数据结构和算法必修课,工作中主要使用各种开发框架,从没刷过算法题,那么你的水平大概是 30~40 分。真的是这样,因为算法这个东西可以理解为一种独立的能力,和编程经验没有直接的关系,需要专门花时间练习。

所以不要觉得 85 分低,这个水平对于技术岗面试笔试和一般的竞赛绰绰够用了。即便你追求更高的水平,也可以先借助本站达到 85 分的水平再说,这并不冲突。

本站目录结构

本站简介

针对初学和速成的学习规划

配套学习工具使用指南

入门:编程语言基础及练习

基础:数据结构及排序精讲

第零章、核心刷题框架汇总

第一章、经典数据结构算法

第二章、经典暴力搜索算法

第三章、经典动态规划算法

第四章、其他常见算法技巧

更多内容

阅读方法

对于准备面试/笔试的读者,可以按照 速成学习计划 中的顺序学习。

对于时间充裕的初学者(比如还未毕业的在校生),按照本站目录顺序阅读,稳扎稳打即可。

本站同时适配 PC 端和移动端,一站式彻底搞定算法笔试面试:

本站内容

本站内容包含图文教程和视频讲解,主要分为三类:

1️⃣ 数据结构教程(约占本站全部内容的 10%)

主要集中在 数据结构及排序精讲 这一章。这部分内容讲解排序算法以及经典数据结构的核心原理和代码实现,一般不包含算法题,主要目的是让读者了解工作中常用数据结构的原理,以及算法题中特有数据结构的原理及使用场景,未来做题时可以直接套用。

2️⃣ 结合例题讲解经典算法框架(约占本站全部内容的 50%)

一些比较经典的算法框架或算法题,我会用整篇文章结合具体的例题做比较细致的讲解,目的是让你理解原理。一般每篇文章包含 2~5 道例题,阅读时顺手就能做掉。

3️⃣ 习题章节帮你熟练运用算法框架(约占本站全部内容的 40%)

目录中标有【练习】的内容属于习题部分,一般紧跟在算法框架内容的后面。习题都是可以直接套框架的题目,目的是通过大量的重复帮你练出肌肉记忆,彻底掌握一类题型的解法。每篇强化练习包含 5~10 道习题,掌握算法框架后可以较快解决。

本站可以带你解决几百道力扣公开免费的题目。这些题目中大部分都是用来练习框架思维的,掌握算法框架后几分钟就能解决,不知不觉中这些题目都能做完。

力扣/LeetCode 题单

应部分读者的要求,我整理了一份题单,汇总本站涵盖的所有题目。安装 Chrome 插件 后点开这个题单,可以看到所有题目都有本站的题解/思路标记。

但是请注意,我个人觉得这个题单用处不大,也不建议你直接对着这个题单刷题。因为这个题单的题目顺序是随机的,做不到循序渐进地学习,也没办法对某个知识点针对性学习;而且并不需要你真的把这么多题全部做完,学会了核心算法框架后,大部分题都可以直接秒的,不需要刻意去刷:

力扣LeetCode
https://leetcode.cn/problem-list/59jEaTgw/https://leetcode.com/list/9zwo3ww5/

我更建议按照 初学读者学习计划 或者 速成读者学习计划 有条理地学习,在对应的学习计划中有分类后的题单,vscode 插件Jetbrains 插件 也对这两个学习计划进行了集成,方便有需要的读者使用。

已过期的网址/PDF/内容

认准本站的最新地址,持续更新:labuladong.online

由于我在不断更新、优化、修正算法教程,一些历史遗留的内容、网站都应该被废弃,因为现在有更简洁、优质的内容提供给你学习。

我在网络上其他平台发表的算法教程都已经过时,不再更新

我曾经使用过的网站地址已经不再维护,包括:

labuladong.gitee.io/algo/

labuladong.github.io/algo/

labuladong.gitbook.io/algo/

曾经的 PDF 也已经过时,包括:《labuladong 的算法小抄》《labuladong 的刷题笔记》《labuladong 的算法秘籍》等。

我非常重视大家的学习体验,一直在持续更新和优化本站内容,顶部有 更新日志bug 反馈 入口。

关于作者

我是 fucking-algorithm 仓库的作者 labuladong,读者一般叫我「东哥」,首创框架思维解题,多次霸榜 GitHub Trending,目前已获得 125k star。

我个人的风格是专注小而精,不做大而全,所以本站只针对算法刷题这个场景,精准打击,一步到位,让读者在最短的时间内彻底搞定算法

本站会员 是唯一的付费项目,一顿饭钱,即可解锁本站所有内容和所有配套工具,享受最丝滑流畅的学习体验。

本站实用功能

速成路线图

本站提供 算法速成规划 并配套学习路线图,点击每个节点即可查看相关文章及题单,方便追踪学习进度。

OJ iframe
  算法速成路线图

算法可视化

在本站以及所有配套插件中,所有解法代码下方都配了一套算法可视化面板,可以直观地查看算法执行过程,辅助理解算法逻辑。

比如这个 计算单链表环起点 的算法,你可以多次点击 if (fast == slow) break 这部分代码,即可看到快慢指针追逐相遇的过程;再多次点击 while (slow != fast) 这部分代码,即可看到快慢指针同步前进在环起点相遇:

Algorithm visualize
  案例一、颜色系统及交互

可视化面板对复杂数据结构和递归算法都有增强,下面是一个 图结构的 DFS 遍历算法,寻找节点 0 到节点 4 的所有路径,你可以多次点击 if (s === n - 1) 这行代码,查看图的遍历过程,以及递归树的生长过程:

Algorithm visualize
  案例二、复杂结构及递归

可视化面板可以以不同的形式展现数据结构,便于读者理解。

比如下面以柱状图的形式展示数组,展示 插入排序 的过程。你可以多次点击 if (nums[i] < nums[i - 1]) 这行代码,查看插入排序的过程:

Algorithm visualize
  案例三、排序算法

可视化面板可以大幅降低你对复杂算法的理解成本,支持所有数据结构和算法,这里仅展示几个例子。更多的经典算法可视化可以在 算法可视化速查页 中查看。

结合游戏,学以致用

可视化面板已经可以让读者直观地理解算法执行过程,但光刷题可能有点无聊,我想做点东西把算法和实际生活联系起来,进一步展现算法的魅力,让大家发自内心地喜欢上算法。

我的一个设想就是,把算法和游戏结合起来。我们从来都是用手来操作游戏,那能不能用算法来操作游戏呢?

所以,我会精心设计一些经典小游戏,把其中用到的算法模块抽象出来,给定一个游戏场景,让读者来编写算法让游戏引擎来执行,最终得到一个可运行的游戏,或完成某个(靠手动操作很难完成的)游戏任务。

这样,读者不仅能得到很强的成就感,最重要的是能了解到算法在实际场景中的运用,对算法有更深刻的理解。

比如下面展示一个贪吃蛇游戏,请你来编写贪吃蛇的移动、吃食物逻辑,让游戏运行起来。没有了解过的读者可能会觉得这个实现很复杂,但其实很简单,运用 单链表的基本操作 就可以做到:

更多有趣的小游戏请参见 算法游戏玩法及汇总

支持所有主流编程语言

本站和所有配套插件的所有题解代码都支持了 Java/C++/Python/Golang/JavaScript 等所有常用的编程语言,能尽可能照顾到更多读者的需求。

所有语言的代码都经过了我的亲自验证和调试,确保正确性和一致性。

本站和所有配套插件都支持代码图片注释,对于较为复杂的代码块中会包含小灯泡图标,鼠标移至小灯泡图标上就会弹出图片辅助理解:

java
class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode fast, slow;
        fast = slow = head;
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) break;
} // 上面的代码类似 hasCycle 函数 if (fast == null || fast.next == null) { // fast 遇到空指针说明没有环 return null; } // 重新指向头结点 slow = head;
// 快慢指针同步前进,相交点就是环起点 while (slow != fast) { fast = fast.next; slow = slow.next; } return slow; } }

其他实用功能

支持阅读历史。在侧边栏和所有文章内,未读过的文章链接前面会显示 标记,读过但未学完的文章会显示 标记,学完的文章会显示 标记,方便你了解自己的学习进度。阅读历史会自动同步到所有设备。

支持专注模式。电脑访问网站时,页面右上角有一个「专注模式」开关,开启后会模糊侧边栏及顶栏,方便集中注意力,或者方便在公司学习的读者。

支持全站搜索。页面右上角的搜索框支持全站搜索,输入力扣的题目、题号、链接也可以直接搜索对应的讲解。

配套刷题插件辅助学习

为了尽可能满足不同读者的需求,我开发维护了本站配套刷题插件,可以让读者在喜欢的代码编辑器中刷题,方便摸鱼

刷题插件集成了 初学者目录速成目录,支持本地调试代码,还可以方便的查看本站的思路讲解、可视化面板、图片注释等实用功能

刷题插件并不是必须安装的,但我会建议安装 Chrome 浏览器插件,因为你在阅读本站时,可能会经常跳转到 LeetCode/力扣 页面上刷题,Chrome 插件能够给你提供一些帮助。vscode/Jetbrain 插件可以根据自己的刷题需求选择安装。

各个刷题插件的安装使用方法详见 Chrome 插件vscode 插件Jetbrain 插件