自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 关于 Linux shell 你必须知道的

预计阅读时间:5 分钟我个人很喜欢使用 Linux 系统,虽然说 Windows 的图形化界面做的确实比 Linux 好,但是对脚本的支持太差了。一开始有点不习惯命令行操作,但是熟悉了之...

2020-02-15 07:50:00

阅读数 6

评论数 0

原创 一起刷题学习 Git/SQL/正则表达式

预计阅读时间:4 分钟虽说我没事就喜欢喷应试教育,但我也从应试教育中发现了一个窍门:如果能够以刷题的形式学习某项技能,效率和效果是最佳的。对于技术的学习,我经常面临的困境是,理论知识知道...

2020-02-11 07:30:00

阅读数 10

评论数 0

原创 随机算法之水塘抽样算法

预计阅读时间:5 分钟我最近在 LeetCode 上做到两道非常有意思的题目,382 和 398 题,关于水塘抽样算法(Reservoir Sampling),本质上是一种随机概率算法,...

2020-02-07 08:00:00

阅读数 5

评论数 0

原创 cookie 和 session 到底是什么

预计阅读时间:8 分钟cookie 大家应该都熟悉,比如说登录某些网站一段时间后,就要求你重新登录;再比如有的同学很喜欢玩爬虫技术,有时候网站就是可以拦截住你的爬虫,这些都和 cooki...

2020-02-03 08:00:00

阅读数 7

评论数 0

原创 加密算法的前世今生

预计阅读时间:8 分钟这里说的密码和我们平时用的密码并不是一个概念。本文讨论的加密算法要解决的主要是信息传输中的加密和解密问题。要假设数据传输过程是不安全的,所有信息都在被窃听的,所以发...

2020-01-21 07:00:00

阅读数 15

评论数 0

原创 如何拆解复杂问题:实现一个计算器

预计阅读时间:9 分钟我记得很多大学数据结构的教材上,在讲栈这种数据结构的时候,应该都会用计算器举例,但是有一说一,讲的真的垃圾,我只感受到被数据结构支配的恐惧,丝毫没有支配数据结构的快...

2020-01-17 07:58:04

阅读数 19

评论数 0

原创 Linux 进程、线程、文件描述符的底层原理

说到进程,恐怕面试中最常见的问题就是线程和进程的关系了,那么先说一下答案:在 Linux 系统中,进程和线程几乎没有区别。Linux 中的进程其实就是一个数据结构,顺带可以理解文件描述符...

2020-01-14 06:40:00

阅读数 14

评论数 0

原创 有人通过 Redis 攻陷了我的服务器...

预计阅读时间:5 分钟好吧,我也做了回标题党,像我这么细心的同学,怎么可能让服务器被入侵呢?其实是这样的,昨天我和一个朋友聊天,他说他自己有一台云服务器运行了 Redis 数据库,有一天...

2020-01-10 12:00:00

阅读数 44

评论数 0

原创 数据结构和算法学习指南

预计阅读时间:9 分钟这是好久之前的一篇文章学习数据结构的框架思维的修订版。之前那篇文章收到广泛好评,没看过也没关系,这篇文章会涵盖之前的所有内容,并且会举很多代码的实例,谈谈如何使...

2020-01-07 12:00:00

阅读数 13

评论数 0

原创 动态规划答疑篇

预计阅读时间:7 分钟这篇文章就给你讲明白两个读者问得最多的问题:1、到底什么才叫「最优子结构」,和动态规划什么关系。2、为什么动态规划遍历dp数组的方式五花八门,有的正着遍历,有的倒着...

2020-01-02 08:09:00

阅读数 8

评论数 0

原创 如何高效判断回文单链表?

预计阅读时间:7 分钟今天聊聊如何判断一个链表是不是回文链表。之前有两篇文章写了回文串和回文序列相关的问题:经典面试题:最长回文子串子序列解题模板:最长回文子序列我们知道,寻找回文串的核...

2019-12-25 08:05:00

阅读数 11

评论数 0

原创 经典动态规划:打家劫舍系列问题

预计阅读时间:8 分钟有好几位读者私下问我 LeetCode 「打家劫舍」系列问题(英文版叫 House Robber)怎么做,我发现这一系列题目的点赞非常之高,是比较有代表性和技巧性的...

2019-12-19 08:00:00

阅读数 17

评论数 0

原创 考官如何用算法调度考生的座位?

预计阅读时间:8 分钟最近不是四六级考试么,我们就来聊聊LeetCode 第 885 题,让你当考官安排座位,有趣且具有一定技巧性。这种题目并不像动态规划这类算法拼智商,而是看你对常用...

2019-12-15 09:00:00

阅读数 6

评论数 0

原创 Union-Find 算法怎么应用?

预计阅读时间:10 分钟上篇文章 Union-Find 并查集算法详解 很多读者对于 Union-Find 算法的应用表示很感兴趣,这篇文章就拿几道 LeetCode 题目来讲讲这个算法...

2019-12-09 08:10:00

阅读数 16

评论数 0

原创 Union-Find 并查集算法详解

预计阅读时间:10分钟今天讲讲 Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。名词很高端,其实特别好理解,等会解释,另外这个算法的应用都非...

2019-12-04 08:10:00

阅读数 35

评论数 0

原创 回溯算法详解

这篇文章是很久之前的一篇《回溯算法详解》的进阶版,之前那篇不够清楚,就不必看了,看这篇就行。把框架给你讲清楚,你会发现回溯算法问题都是一个套路。 废话不多说,直接上回溯算法框架。解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题: 1、路径:也就是已经做出的选择。 2、选择...

2019-12-02 12:59:12

阅读数 24

评论数 0

原创 经动态规划:编辑距离

预计阅读时间:8 分钟前几天在网上看到一份鹅场的面试题,算法部分大半是动态规划,最后一题就是写一个计算编辑距离的函数,今天就专门写一篇文章来探讨一下这个经典问题。我个人很喜欢编辑距离这个...

2019-11-30 08:29:00

阅读数 9

评论数 0

原创 动态规划详解(修订版)

预计阅读时间:11 分钟这篇文章是我们号半年前一篇 200 多赞赏的成名之作动态规划详解 的进阶版。由于账号迁移的原因,旧文无法被搜索到,所以我润色了本文,并添加了更多干货内容,希望本...

2019-11-30 08:29:00

阅读数 39

评论数 1

原创 动态规划之博弈问题

预计阅读时间:9分钟上一篇文章一行代码就能解决的智力题 中讨论到一个有趣的「石头游戏」,通过题目的限制条件,这个游戏是先手必胜的。但是智力题终究是智力题,真正的算法问题肯定不会是投...

2019-11-30 08:29:00

阅读数 21

评论数 0

原创 动态规划之 KMP 算法详解

预计阅读时间:15 分钟KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂。很多读者抱怨 KMP算法无法理解,这很正常,想...

2019-11-30 08:29:00

阅读数 26

评论数 0

原创 回溯算法详解(修订版)

预计阅读时间:10 分钟这篇文章是很久之前的一篇《回溯算法详解》的进阶版,之前那篇不够清楚,就不必看了,看这篇就行。把框架给你讲清楚,你会发现回溯算法问题都是一个套路。废话不多说,直接上...

2019-11-24 17:29:17

阅读数 18

评论数 0

原创 经典动态规划:高楼扔鸡蛋(进阶篇)

预计阅读时间:9 分钟我们在上篇文章聊了高楼扔鸡蛋问题,讲了一种效率不是很高,但是较为容易理解的动态规划解法。后台很多读者问如何更高效地解决这个问题,今天就谈两种思路,来优化一下这...

2019-11-20 08:10:00

阅读数 18

评论数 0

原创 经典动态规划:高楼扔鸡蛋

预计阅读时间:7 分钟今天要聊一个很经典的算法问题,若干层楼,若干个鸡蛋,让你算出最少的尝试次数,找到鸡蛋恰好摔不碎的那层楼。国内大厂以及谷歌脸书面试都经常考察这道题,只不过他们觉得扔鸡...

2019-11-17 08:10:00

阅读数 83

评论数 0

原创 子序列解题模板:最长回文子序列

预计阅读时间:6 分钟子序列问题是常见的算法问题,而且并不好解决。首先,子序列问题本身就相对子串、子数组更困难一些,因为前者是不连续的序列,而后两者是连续的,就算穷举都不容易,更别说求解...

2019-11-13 09:37:43

阅读数 14

评论数 0

原创 一行代码解决的智力题

下文是我在 LeetCode 刷题过程中总结的三道有趣的「脑筋急转弯」题目,可以使用算法编程解决,但只要稍加思考,就能找到规律,直接想出答案。 一、Nim 游戏 游戏规则是这样的:你和你的朋友面前有一堆石子,你们轮流拿,一次至少拿一颗,最多拿三颗,谁拿走最后一颗石子谁获胜。 假设你们都很聪明,由你...

2019-11-11 14:41:06

阅读数 9

评论数 0

原创 最长公共子序列

最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经典的面试题目,因为它的解法是典型的二维动态规划,大部分比较困难的字符串问题都和这个问题一个套路,比如说编辑距离。而且,这个算法稍加改造就可以用于解决其他问题,所以说 LCS 算法是值得掌握的。 题目就是...

2019-11-11 14:17:49

阅读数 13

评论数 0

原创 动态规划设计:最长递增子序列

很多读者反应,就算看了前文动态规划详解,了解了动态规划的套路,也不会写状态转移方程,没有思路,怎么办?本文就借助「最长递增子序列」来讲一种设计动态规划的通用技巧:数学归纳思想。 最长递增子序列(Longest Increasing Subsequence,简写 LIS)是比较经典的一个问题,比较容...

2019-11-11 14:16:26

阅读数 19

评论数 0

原创 贪心算法之区间调度问题

什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高。 比如说一个算法问题使用暴力解法需要指数级时间,如果能使用动态规划消除重叠子问题,就可以降到多项式级别的时间,如果满足贪心选择性质,那么可以进一步降低时...

2019-11-11 14:14:14

阅读数 15

评论数 0

原创 动态规划之编辑距离

前几天看了一份鹅场的面试题,算法部分大半是动态规划,最后一题就是写一个计算编辑距离的函数,今天就专门写一篇文章来探讨一下这个问题。 我个人很喜欢编辑距离这个问题,因为它看起来十分困难,解法却出奇得简单漂亮,而且它是少有的比较实用的算法(是的,我承认很多算法问题都不太实用)。下面先来看下题目: 为...

2019-11-11 14:11:18

阅读数 14

评论数 0

原创 KMP 算法详解

KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂。 很多读者抱怨 KMP 算法无法理解,这很正常,想到大学教材上关于 KMP 算法的讲解,也不知道有多少未来的 Knuth、Morris、Pratt 被提前劝退了。有一些优秀的同学通过手...

2019-11-11 14:02:21

阅读数 122

评论数 0

原创 谁能想到,求最值的算法还能优化?

预计阅读时间:8 分钟今天主要来聊两个问题:给一个数组,如何同时求出最大值和最小值,如何同时求出最大值和第二大值?这两个问题看起来都特别简单,一个 for 循环,几个大小判断 if 语句...

2019-11-05 07:50:00

阅读数 4

评论数 0

原创 递归思想:用锅铲给烧饼排序

预计阅读时间:5 分钟烧饼排序是个很有意思的实际问题:假设盘子上有n块面积大小不一的烧饼,你如何用一把锅铲进行若干次翻转,让这些烧饼的大小有序(小的在上,大的在下)?设想一下用锅铲翻转一...

2019-10-31 07:50:00

阅读数 5

评论数 0

原创 动态规划算法实现正则表达匹配

之前的文章【动态规划详解】收到了普遍的好评,今天写一个动态规划的实际应用:正则表达式。如果有读者对「动态规划」还不了解,建议先看一下上面那篇文章。 正则表达式匹配是一个很精妙的算法,而且难度也不小。本文主要写两个正则符号的算法实现:点号「.」和星号「*」,如果你用过正则表达式,应该明白他们的用法,...

2019-07-29 10:17:08

阅读数 14

评论数 0

原创 几道一行代码就能解决的智力题

下文是我在 LeetCode 刷题过程中总结的三道有趣的「脑筋急转弯」题目,可以使用算法编程解决,但只要稍加思考,就能找到规律,直接想出答案。 一、Nim 游戏 游戏规则是这样的:你和你的朋友面前有一堆石子,你们轮流拿,一次至少拿一颗,最多拿三颗,谁拿走最后一颗石子谁获胜。 假设你们都很聪明,由你...

2019-07-29 09:51:51

阅读数 26

评论数 0

原创 一文读懂动态规划算法原理,由浅入深

动态规划详解 本文转载自微信公众号:labuladong 动态规划算法似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。 而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如...

2019-07-29 09:47:07

阅读数 37

评论数 0

原创 动态规划设计方法详解最长递增子序列

很多读者反应,就算看了前文动态规划详解,了解了动态规划的套路,也不会写状态转移方程,没有思路,怎么办?本文就借助「最长递增子序列」来讲一种设计动态规划的通用技巧:数学归纳思想。 最长递增子序列(Longest Increasing Subsequence,简写 LIS)是比较经典的一个问题,比较容...

2019-07-29 09:38:46

阅读数 14

评论数 0

原创 一些有趣有用的位操作

本文分两部分,第一部分列举几个有趣的位操作,第二部分讲解算法中常用的 n & (n - 1) 操作,顺便把用到这个技巧的算法题列出来讲解一下。因为位操作很简单,所以假设读者已经了解与、或、异或这三种基本操作。 位操作(Bit Manipulation)可以玩出很多奇技淫巧,但是这些技巧大部...

2019-07-29 09:34:01

阅读数 33

评论数 0

原创 随机乱置算法(洗牌算法)详解

我知道大家会各种花式排序算法,但是如果叫你打乱一个数组,你是否能做到胸有成竹?即便你拍脑袋想出一个算法,怎么证明你的算法就是正确的呢?乱序算法不像排序算法,结果唯一可以很容易检验,因为「乱」可以有很多种,你怎么能证明你的算法是「真的乱」呢? 所以我们面临两个问题: 什么叫做「真的乱」? 设计怎样...

2019-07-29 09:24:37

阅读数 57

评论数 0

原创 LRU 算法策略详解

如果只想看代码的读者可以直接翻到最后,有 Java 和 C++ 的解法代码。 一、什么是 LRU 算法 就是一种缓存淘汰策略。 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢?我们肯定希望删掉哪些没什么用的缓存,而把有用的数据继续留在缓存里,方便之后继...

2019-07-29 09:23:30

阅读数 202

评论数 0

原创 二叉搜索树操作集锦

二叉树算法的设计的总路线:明确一个节点要做的事情,然后剩下的事抛给框架。 void traverse(TreeNode root) { // root 需要做什么?在这做。 // 其他的不用 root 操心,抛给框架 traverse(root.left); tra...

2019-07-29 09:21:23

阅读数 36

评论数 0

提示
确定要删除当前文章?
取消 删除