首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
labuladong的算法专栏
labuladong
创建于2021-07-07
订阅专栏
东哥带你手把手刷算法
等 13 人订阅
共104篇文章
创建于2021-07-07
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
学习目录
读者经常让我写刷题路线,我觉得这些东西太枯燥了,今天就编一个故事讲讲。 这要从小东开始学习技术开始讲起。 小东是一个目标明确的人,自从上了大学就在琢磨怎么才能找高薪工作多赚钱。他发现做程序员工资挺高,而且有大量优秀的 在线练习平台,所以毅然决定入坑。 计算机的几大基础,Linu…
教你几招算法笔试的套路
我知道各位是被标题吸引进来的,那就不废话,先说几个算法笔试的硬核套路,再说说做题复习的策略。 大家也知道,大部分笔试题目都需要你自己来处理输入数据,然后让程序打印输出。判题的底层原理是,把你程序的输出用 Linux 重定向符 > 写到文件里面,然后比较你的输出和正确答案是否相同…
Git/SQL/正则表达式的在线练习平台
虽说我没事就喜欢喷应试教育,但我也从应试教育中发现了一个窍门:如果能够以刷题的形式学习某项技能,效率和效果是最佳的。对于技术的学习,我经常面临的困境是,理论知识知道的不少,但是有的场景实在无法模拟,缺少亲自动手实践的机会,如果能有一本带标准答案的习题册让我刷刷就好了。 所以在学…
我用四个命令概括了 Git 的所有套路
我先开一会儿吐槽大会,Git 这东西我用了两年,根本尼玛用不明白。 我搞不明白的一个重要原因就是,命令的功能太杂,有时候一个需求可以用好几种命令解决,而且有的命令还 tm 有别名。这导致什么问题呢,我在网上找到的答案五花八门,竟然都能达成目的,难以找到规律,毫无套路可言。对于我…
一文看懂 session 和 cookie
cookie 大家应该都熟悉,比如说登录某些网站一段时间后,就要求你重新登录;再比如有的同学很喜欢玩爬虫技术,有时候网站就是可以拦截住你的爬虫,这些都和 cookie 有关。如果你明白了服务器后端对于 cookie 和 session 的处理逻辑,就可以解释这些现象,甚至钻一些…
Linux shell 的实用小技巧
前几篇关于 Linux 的文章很受欢迎,很多读者都希望我多写写这方面的文章。我以后会定期分享一些 Linux 的实用小技巧,你用习惯之后可能就会和我一样,使用 Windows 就头疼。。。 先说句题外话,大家总是问能不能装双系统,装什么 Linux 发行版比较好。这里统一回答一…
Linux的进程、线程、文件描述符是什么
说到进程,恐怕面试中最常见的问题就是线程和进程的关系了,那么先说一下答案:在 Linux 系统中,进程和线程几乎没有区别。 Linux 中的进程就是一个数据结构,看明白就可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区…
如何调度考生的座位
这是 LeetCode 第 855 题,有趣且具有一定技巧性。这种题目并不像动态规划这类算法拼智商,而是看你对常用数据结构的理解和写代码的水平,个人认为值得重视和学习。 另外说句题外话,很多读者都问,算法框架是如何总结出来的,其实框架反而是慢慢从细节里抠出来的。希望大家看了我们…
如何寻找最长回文子串
回文串是面试常常遇到的问题(虽然问题本身没啥意义),本文就告诉你回文串问题的核心思想是什么。 首先,明确一下什:回文串就是正着读和反着读都一样的字符串。 比如说字符串 aba 和 abba 都是回文串,因为它们对称,反过来还是和本身一样。反之,字符串 abac 就不是回文串。 …
回溯算法团灭子集、排列、组合问题
今天就来聊三道考察频率高,而且容易让人搞混的算法问题,分别是求子集(subset),求排列(permutation),求组合(combination)。 这几个问题都可以用回溯算法模板解决,同时子集问题还可以用数学归纳思想解决。读者可以记住这几个问题的回溯套路,就不怕搞不清了。…
如何去除有序数组的重复元素
我们知道对于数组来说,在尾部插入、删除元素是比较高效的,时间复杂度是 O(1),但是如果在中间或者开头插入、删除元素,就会涉及数据的搬移,时间复杂度为 O(N),效率较低。 所以上篇文章 O(1)时间删除/查找数组中的任意元素 就讲了一种技巧,把待删除元素交换到最后一个,然后再…
一行代码就能解决的算法题
下文是我在 LeetCode 刷题过程中总结的三道有趣的「脑筋急转弯」题目,可以使用算法编程解决,但只要稍加思考,就能找到规律,直接想出答案。 游戏规则是这样的:你和你的朋友面前有一堆石子,你们轮流拿,一次至少拿一颗,最多拿三颗,谁拿走最后一颗石子谁获胜。 假设你们都很聪明,由…
如何运用贪心思想玩跳跃游戏
经常有读者在后台问,动态规划和贪心算法到底有啥关系。我们之前的文章 贪心算法之区间调度问题 就说过一个常见的时间区间调度的贪心算法问题。 说白了,贪心算法可以理解为一种特殊的动态规划问题,拥有一些更特殊的性质,可以进一步降低动态规划算法的时间复杂度。那么这篇文章,就讲 Leet…
如何在无限序列中随机抽取元素
我最近在 LeetCode 上做到两道非常有意思的题目,382 和 398 题,关于水塘抽样算法(Reservoir Sampling),本质上是一种随机概率算法,解法应该说会者不难,难者不会。 我第一次见到这个算法问题是谷歌的一道算法题:给你一个未知长度的链表,请你设计一个算…
如何去除有序数组的重复元素
我们知道对于数组来说,在尾部插入、删除元素是比较高效的,时间复杂度是 O(1),但是如果在中间或者开头插入、删除元素,就会涉及数据的搬移,时间复杂度为 O(N),效率较低。 所以对于一般处理数组的算法问题,我们要尽可能只对数组尾部的元素进行操作,以避免额外的时间复杂度。 显然,…
如何同时寻找缺失和重复的元素
今天就聊一道很看起来简单却十分巧妙的问题,寻找缺失和重复的元素。之前的一篇文章「寻找缺失元素」也写过类似的问题,不过这次的和上次的问题使用的技巧不同。 给一个长度为 N 的数组 nums,其中本来装着 [1..N] 这 N 个元素,无序。但是现在出现了一些错误,nums 中的一…
如何寻找缺失的元素
之前也有文章写过几个有趣的智力题,今天再聊一道巧妙的题目。 给一个长度为 n 的数组,其索引应该在 [0,n),但是现在你要装进去 n + 1 个元素 [0,n],那么肯定有一个元素装不下嘛,请你找出这个缺失的元素。 或者说,借助数据结构的特性,用一个 HashSet 把数组里…
如何判断回文链表
我们之前有两篇文章写了回文串和回文序列相关的问题。 因为回文串长度可能为奇数也可能是偶数,长度为奇数时只存在一个中心点,而长度为偶数时存在两个中心点,所以上面这个函数需要传入l和r。 PS:我认真写了 100 多篇原创,手把手刷 200 道力扣题目,全部发布在 labulado…
括号插入
对括号的合法性判断多次在笔试中出现,现实中也很常见,比如说我们写的代码,编辑器会检查括号是否正确闭合。而且我们的代码可能会包含三种括号 [](){},判断起来有一点难度。 来看一看力扣第 20 题「有效的括号」,输入一个字符串,其中包含 [](){} 六种括号,请你判断这个字符…
如何高效解决接雨水问题
接雨水这道题目挺有意思,在面试题中出现频率还挺高的,本文就来步步优化,讲解一下这道题。 就是用一个数组表示一个条形图,问你这个条形图最多能接多少水。 下面就来由浅入深介绍暴力解法 -> 备忘录解法 -> 双指针解法,在 O(N) 时间 O(1) 空间内解决这个问题。 我第一次看…
下一页