由于 labuladong 的算法网站频繁被攻击,且国内访问速度可能比较慢,所以本站同时开放多个镜像站点:

https://labuladong.gitee.io/algo/

https://labuladong.github.io/algo/

这两个站点的内容都是一样的,你可以自行选择访问速度较快的站点开始学习。

PC 端请收藏上述网站地址;手机端请关注 labuladong 公众号阅读最新文章,另外《labuladong 的算法小抄》已出版,关注公众号可获取最新折扣信息:

本网站目前可以手把手带你解决 200 道 LeetCode 算法问题,而且在不断更新,全部基于 LeetCode 的题目,涵盖了所有题型和技巧,我已经把在每篇文章的开头加上了该文章可以解决的 LeetCode 题目链接,可以看完文章立即去拿下对应题目。

另外,配合我的刷题插件和 PDF 教材在本站学习的体验会更好,比如如果你习惯在英文版 LeetCode 刷题,可以通过 刷题插件 将本站所有题目链接改为 LeetCode 的链接。

插件和配套 PDF 的下载方法见这里: labuladong 的刷题三件套正式发布

关于我

简单介绍一下我自己,我应该是 2018 年就开始刷算法题,顺便开通了自己的公众号,诞生了 labuladong 这个昵称,之后就一直在算法领域持续输出,2020 年在 GitHub 开源了算法仓库 fucking-algorithm,没想到火遍了全网,一年过去了,现在这个仓库已经快有 100k star 了。

由于这个仓库的火爆,有很多出版社找来寻求出版,我在去年年底出版了纸质书《labuladong 的算法小抄》,销量一直非常稳定,为了感谢公众号读者一直以来的支持,我把公众号的大部分文章放到了网站上,方便大家学习。

众所周知现在技术岗面试内卷严重,算法基本上是必考项目了,我知道很多人对算法并不是真爱,所以被算法搞得很头痛。

我也是这样过来的,但靠着自己的努力和一些技巧,在毕业秋招斩获了 13 个 offer,你随便说一个大厂,我都拿到了 offer。

说这些,不是凡尔赛,说实话刷个题面个试真的不算啥,我身边的大佬也比较多,比找工作难的事情多着呢。

我想说的是,其实刷题也好,面试也好,都是有技巧的,我希望把我的技巧和经验分享给大家。如果你有刷算法题的需求觉得算法难,面试笔试难,那么我可以提供一些捷径,避免你走太多弯路。

另外,我奉行的原则是「少即是多」,致力于提高「知识密度」而不是文章数量。

举个简单的例子,你可以看到很多算法相关的博客/仓库,动辄有四五百篇文章,每篇文章其实就是一道题的解法代码 + 三言两语的注释甩在那里,你也许能看懂,但很难做到举一反三,真正会做那一类题目。

而我会严格限制文章数量的增长,把精力放在提高单篇文章质量上面,我称之为「知识密度」。随着我自己不断刷题和思考,如果觉得某篇历史文章的知识密度不够高,那么我会毫不犹豫地下架历史文章,重新构思和发布一篇更干,更通用的新文章。

学习算法可能遇到的问题

1、题太多,不知道从哪里开始刷。

现在 LeetCode 已经 2000 多道题目了,难道我要全部刷完,才算搞定算法了吗?

我应该怎么刷题?按题号一道道刷?按分类刷?听说动态规划相关的问题经常出现,干脆直接开始刷动态规划问题?

我理解大家这种急切的心情,但是在刷最热门的类型之前,有一些必要的前置知识,如果你不掌握的话,很可能一脸懵逼;但如果按照一定的章法掌握之后,就能找到抓手,成功赋能,轻易地打出一套算法组合拳(手动滑稽)。

2、没有人指导,刷一道题就仅仅是刷了一道题而已,很难举一反三。

这是很多朋友都存在的问题,尤其是在刚开始刷题的时候,很难在做完一道题后总结出一些通用的技巧,在遇到新的问题时运用出来,所以很多读者调侃自己「一看都会,一做就废」。

不需要气馁,在刚刚刷题的过程中,积累的算法技巧有限,难以举一反三很正常。但如果有人能够给一些思路上的引导,会让你学习算法的效率事半功倍。

3、被有意无意地灌输错误的思想,以为算法很高大上,非要啃完算法导论才算是入门,所以从心理上就畏惧算法。

我对这个问题有切身体会,刚学算法那会儿,我会去搜索过各种资料、经验贴之类的,想快速入门。

现在回头在看,就觉得很有意思,我是说很多写经验贴的作者心态很有意思。

举个例子,很多「大佬」,你问他怎么入门算法,他告诉你看《算法导论》,然后又甩给你一堆英文课程,还强调一定要看英文的哦,中文的翻译不好。

这就好比,你是一个胖子,去问人家怎么减肥,人家告诉对方,每次做 100 个俯卧撑,100 个引体向上,一天三次,肯定有效,你看我就是这样练出来的!

呵呵,我要是真能做到这些,还用得着来问你么?不过你仔细琢磨琢磨,给出这种回答是基于一种什么心理?

实际上他根本不在乎你的诉求,他只是想告诉你:我做过这些,我吃过这些苦,我牛逼吧,我厉害吧,你羡慕吧,你做不到吧~

不过话说回来,这种小九九人皆有之,我也不例外,我也时不时想证明自己牛,想证明自己和别人不一样,我以前做分享,也会多少有点故弄玄虚的倾向。

但后来我发现,真正帮助别人解决问题,是更能得到对方的认可的,这也是我的公众号能够很快成长的原因。

所以大家可以放心,我的这份教程是「老少皆宜」,非常接地气的,最能解决学习算法这个问题的。

都说算法难,到底难在哪里

1、技巧较多,难以整活儿

各种算法技巧确实比较繁杂,初学者很容易碰到没见过的技巧,碰到时就大呼牛逼,觉得自己菜。比如说判断一个单链表是否成环的算法,一般人确实很难想到。

这也是为什么我说一开始刷算法题不要死磕,因为技巧储备还不够。

比如现在出一道数组的题目,你的脑海里能浮现出什么算法技巧?最起码应该想到 二分查找、 快慢指针、 左右指针、 滑动窗口、 前缀和数组、 差分数组

这些技巧就好比工具库里各种型号的工具,你得有的选,才能运用出来不是吗?那么对于初学者,工具库里面就没什么东西,拿什么死磕?用锯子去挖石头,这不扯淡呢吗?

那么如何解决技巧储备不足的问题呢?这就是我想解决的问题,我把所有常用的算法技巧都集合起来,给你整理出一份「算法小抄」,就可以帮你在做题的过程中有一个方向性的指导。

下次遇到数组相关的题目时,你把我总结的数组相关的技巧都拿出来,一个个试,形成一套固定的做题方法,那遇到新的算法题,不就来者不惧了吗?

2、对于递归的理解不透彻

递归思维是经典的计算机思维,如果掌握不好,很多时候你去看别人的题解代码可能都看不懂,这就很打击人的自信,觉得自己好菜。

不用气馁,递归确实不好理解,因为它是「计算机思维」嘛,你是个人,又不是个计算机,当然不容易理解了。

要掌握递归,关键要跳出细节,培养框架思维,尝试从整体上理解算法的过程。

以我的刷题经验,初学者最好从「树」相关的问题开始刷题,为此我特意写了 手把手刷二叉树(纲领篇),帮你从二叉树的视角理解各种复杂的算法。

另外, 我的刷题插件 中也集成了 手把手刷题二叉树题目 的功能,帮助大家培养框架思维。

别不信,到后面你会发现递归代码反而是最简单,最容易理解的。

你能在这里学到什么

我的读者可以大致分两类:一类对算法完全没有兴趣,属于面向笔试学习算法的读者;另一类是对算法感兴趣,能够享受纯粹求知乐趣的读者。

我个人属于后者,自然希望后者多一些,但毕竟人各有志,两种读者没有对错之分,而且人总是会变的,说不定学着学着就改变想法了呢?这也未可知。

当然,我的文章能够同时满足这两者的需求:

首先,我会结合自己的刷题经验,有所取舍,忽略性价比不高的算法技巧,抽象出常用算法的框架,帮助大家高效掌握算法,搞定面试笔试。

另外,我也会清晰地描述自己的解题过程,阐述算法的底层原理,帮助大家培养框架思维以及举一反三的能力,力求让大家真正爱上算法,每天不刷两道题都难受的那种。

所以,不管你是刚刚入门算法的小白,还是已经对算法有所小成,希望进阶,我相信这些内容都会对你有帮助。

最后,公众号后台回复「进群」可加入算法群,大家一起刷题,从现在开始,养成刷题的好习惯:

labuladong的更多相关文章

  1. leetcode股票问题方法收集 转载自微信公众号labuladong

    一.穷举框架首先,还是一样的思路:如何穷举?这里的穷举思路和上篇文章递归的思想不太一样. 递归其实是符合我们思考的逻辑的,一步步推进,遇到无法解决的就丢给递归,一不小心就做出来了,可读性还很好.缺点就 ...

  2. 笔试算法稳了,GitHub 50k Star《labuladong的算法小抄》

    秋招算法有救了!!! 前不久在 GitHub 出现了一个手把手带你刷 LeetCode 的项目:fucking-algorithm. 该项目此前在 GitHub 开源后,连续多次霸榜 GitHub T ...

  3. labuladong 算法小抄

    <labuladong的算法小抄官方完整版> 本书目前可以手把手带你解决 110 道 LeetCode 算法问题,而且在不断更 新,全部基于 LeetCode 的题目,涵盖了所有题型和技巧 ...

  4. labuladong 05.16 微信直播

    labuladong 05.16 微信直播 一.基础: 1.校招相关 1)扫盲 秋招:8-10月 提前批:7月 暑期实习:3-5月 非必须 2)关注公司前景,部门信息,公司财报 企查查,天眼查,多获取 ...

  5. LeetCode practice

    子集和问题:给定一组数和一个值,从这组数中选出若干个数使其和为给定的值.这是个NPC问题. 1.https://leetcode.com/problems/counting-bits/#/soluti ...

  6. eetcode必要技巧--动态规划(一)

    首先我们要搞清楚什么是动态规划 动态规划是运筹学中用于求解决策过程中的最优化数学方法.当然,我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法. 当然这个很难理解,但是按 ...

  7. LeetCode(239.滑动窗口的最大值

    题目: 给定一个数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到最右侧,你只可以看到滑动窗口内的k个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 示例: 输入: nums = ...

  8. GitHub 热点速览 Vol.18:刷 LeetCode 的正确姿势

    作者:HelloGitHub-小鱼干 摘要:找对路子,事半功倍,正如本周 GitHub Trending #刷 LeetCode# 主题想表达的那般,正确的学习姿势方能让人走得更远,走进大厂

  9. LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式

    作者:HelloGitHub-小鱼干 在众多的诸如阿里.腾讯等大厂之中,最看中面试者刷题技能的大概要数有"链表厂"之称的字节跳动了.作为一个新晋大厂,字节跳动以高薪.技术大佬云集吸 ...

  10. leetcode刷题记录——树

    递归 104.二叉树的最大深度 /** * Definition for a binary tree node. * public class TreeNode { * int val; * Tree ...

随机推荐

  1. Typora多线程批量上传图片,永久免费25G图床

    为了满足日常需求,就写了一个自动上传图片到图床的脚本 运行该程序可以做到自动完成图片上传,并自动替换为网络链接,支持多图同时上传,采用了多线程,上传速度提升很明显. 以Window系统为例,操作步骤: ...

  2. .md图片链接转存并替换路径,及相关报错解决方法

    最初我想把Typora中.md文件中的web图片链接都下载保存到本地,并且替换.md文本中的路径 说干就干,因为在网上没有找到现成的程序所以自己写了这个程序 思路是循环查找文件夹中的文件,然后yiel ...

  3. KingbaseES V8R6集群维护之--修改数据库服务端口案例

    ​ 案例说明: 对于KingbaseES数据库单实例环境,只需要修改kingbase.conf文件的'port'参数即可,但是对于KingbaseES V8R6集群中涉及到多个配置文件的修改,并且在应 ...

  4. 创建一个k8s私有仓库-harbor

    〇.前言 这一步应该是在搭建k8s之前做好,注意了奥 一.安装docker和docker-compose 1.下载docker-compose的最新版本 # 建议那种网上冲浪下载!,下载下来记得命名成 ...

  5. Golang实现set

    背景 Golang语言本身未实现set,但是实现了map golang的map是一种无序的键值对的集合,其中键是唯一的 而set是键的不重复的集合,因此可以用map来实现set Empty 由于map ...

  6. .Net下的高效分页

    本文技术方案支持.Net/.Net Core/.Net Framework 数据分页,几乎是任何应用系统的必备功能.但当数据量较大时,分页操作的效率就会变得很低.大数据量分页时,一个操作耗时5秒.10 ...

  7. Python数据科学手册-机器学习: 决策树与随机森林

    无参数 算法 随机森林 随机森林是一种集成方法,集成多个比较简单的评估器形成累计效果. 导入标准程序库 随机森林的诱因: 决策树 随机森林是建立在决策树 基础上 的集成学习器 建一颗决策树 二叉决策树 ...

  8. Logstash:解析 JSON 文件并导入到 Elasticsearch 中

    转载自:https://elasticstack.blog.csdn.net/article/details/114383426 在今天的文章中,我们将详述如何使用 Logstash 来解析 JSON ...

  9. Codeforces Round #577 (Div. 2) C. Maximum Median

    题意:就是给一n(奇数)个元素数组,可以对它的元素执行k次+1操作,递增排序,求中位数最大是多少. 那我们在排完序之后,中位数前的元素可以不管它,只要对中位数后的操作就行,我们要判断和中位数相等的元素 ...

  10. IDEA上关于 jstl导包的问题

    IDEA上关于 jstl的问题 在 IDEA上使用 maven创建 web骨架项目,在 pom文件中添加 jstl依赖 <dependency> <groupId>jstl&l ...