随笔分类 - 算法思维系列
摘要:读完本文,你可以去力扣拿下如下题目: 733.扁平化嵌套列表 今天来讲一道非常有启发性的设计题目,为什么说它有启发性,我们后面再说。 一、题目描述 这是 LeetCode 第 341.扁平化嵌套列表迭代器,我来描述一下题目: 首先,现在有一种数据结构 NestedInteger,这个结构中存的数据可
阅读全文
摘要:上篇文章 洗牌算法详解 讲到了验证概率算法的蒙特卡罗方法,今天聊点轻松的内容:几个和概率相关的有趣问题。 计算概率有下面两个最简单的原则: 原则一、计算概率一定要有一个参照系,称作「样本空间」,即随机事件可能出现的所有结果。事件 A 发生的概率 = A 包含的样本点 / 样本空间的样本总数。 原则二
阅读全文
摘要:读完本文,你可以去力扣拿下如下题目: 46.全排列 51.N皇后 这篇文章是很久之前的一篇《回溯算法详解》的进阶版,之前那篇不够清楚,就不必看了,看这篇就行。把框架给你讲清楚,你会发现回溯算法问题都是一个套路。 废话不多说,直接上回溯算法框架。解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需
阅读全文
摘要:读完本文,你可以去力扣拿下如下题目: 76.最小覆盖子串 567.字符串的排列 438.找到字符串中所有字母异位词 3.无重复字符的最长子串 鉴于前文 二分搜索框架详解 的那首《二分搜索升天词》很受好评,并在民间广为流传,成为安睡助眠的一剂良方,今天在滑动窗口算法框架中,我再次编写一首小诗来歌颂滑动
阅读全文
摘要:经常刷 LeetCode 的读者肯定知道鼎鼎有名的 twoSum 问题,我们上篇文章 twoSum 问题的核心思想 就对 twoSum 的几个变种做了解析。 但是除了 twoSum 问题,LeetCode 上面还有 3Sum,4Sum 问题,我估计以后出个 5Sum,6Sum 也不是不可能。 那么,
阅读全文
摘要:读完本文,你可以去力扣拿下如下题目: 22.括号生成 括号问题可以简单分成两类,一类是前文写过的 括号的合法性判断 ,一类是合法括号的生成。对于括号合法性的判断,主要是借助「栈」这种数据结构,而对于括号的生成,一般都要利用回溯递归的思想。 关于回溯算法,我们前文写过一篇 回溯算法套路框架详解 反响非
阅读全文
摘要:读完本文,你可以去力扣拿下如下题目: 111.二叉树的最小深度 752.打开转盘锁 后台有很多人问起 BFS 和 DFS 的框架,今天就来说说吧。 首先,你要说 labuladong 没写过 BFS 框架,这话没错,今天写个框架你背住就完事儿了。但要是说没写过 DFS 框架,那你还真是说错了,其实
阅读全文
摘要:读完本文,你可以去力扣拿下如下题目: 37.解数独 经常拿回溯算法来说事儿的,无非就是八皇后问题和数独问题了。那我们今天就通过实际且有趣的例子来讲一下如何用回溯算法来解决数独问题。 一、直观感受 说实话我小的时候也尝试过玩数独游戏,但从来都没有完成过一次。做数独是有技巧的,我记得一些比较专业的数独游
阅读全文
摘要:读完本文,你可以去力扣拿下如下题目: 1109.航班预订统计 前文 前缀和技巧详解 写过的前缀和技巧是非常常用的算法技巧,前缀和主要适用的场景是原始数组不会被修改的情况下,频繁查询某个区间的累加和。 没看过前文没关系,这里简单介绍一下前缀和,核心代码就是下面这段: class PrefixSum {
阅读全文
摘要:读完本文,你可以去力扣拿下如下题目: 733.图像渲染 啥是 FloodFill 算法呢,最直接的一个应用就是「颜色填充」,就是 Windows 绘画本中那个小油漆桶的标志,可以把一块被圈起来的区域全部染色。 这种算法思想还在许多其他地方有应用。比如说扫雷游戏,有时候你点一个方格,会一下子展开一片区
阅读全文
摘要:读完本文,你可以去力扣拿下如下题目: 773.滑动谜题 滑动拼图游戏大家应该都玩过,下图是一个 4x4 的滑动拼图: 拼图中有一个格子是空的,可以利用这个空着的格子移动其他数字。你需要通过移动这些数字,得到某个特定排列顺序,这样就算赢了。 我小时候还玩过一款叫做「华容道」的益智游戏,也和滑动拼图比较
阅读全文
摘要:读完本文,你可以去力扣拿下如下题目: 1.两数之和 170.两数之和 III - 数据结构设计 Two Sum 系列问题在 LeetCode 上有好几道,这篇文章就挑出有代表性的几道,介绍一下这种问题怎么解决。 TwoSum I 这个问题的最基本形式是这样:给你一个数组和一个整数 target,可以
阅读全文
摘要:吃葡萄问题 学好算法全靠套路,认准 labuladong 就够了! 如果你在迎战秋招,东哥悄悄告诉你一些 笔试中的套路。 相关推荐: 团灭 LeetCode 股票买卖问题 一文看懂 session 和 cookie 读完本文,你可以去力扣拿下如下题目: 吃葡萄 今天在牛客网上做了一道叫做「吃葡萄」的
阅读全文
摘要:啥是 FloodFill 算法呢,最直接的一个应用就是「颜色填充」,就是 Windows 绘画本中那个小油漆桶的标志,可以把一块被圈起来的区域全部染色。 这种算法思想还在许多其他地方有应用。比如说扫雷游戏,有时候你点一个方格,会一下子展开一片区域,这个展开过程,就是 FloodFill 算法实现的。
阅读全文
摘要:今天讲讲 Union Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。名词很高端,其实特别好理解,等会解释,另外这个算法的应用都非常有趣。 说起这个 Union Find,应该算是我的「启蒙算法」了,因为《算法4》的开头就介绍了这款算法,可是把我秀翻了,感觉好精妙啊!后
阅读全文
摘要:上篇文章很多读者对于 Union Find 算法的应用表示很感兴趣,这篇文章就拿几道 LeetCode 题目来讲讲这个算法的巧妙用法。 首先,复习一下,Union Find 算法解决的是图的动态连通性问题,这个算法本身不难,能不能应用出来主要是看你抽象问题的能力,是否能够把原始问题抽象成一个有关图论
阅读全文
摘要:先给大家讲个笑话乐呵一下: 有一天阿东到图书馆借了 N 本书,出图书馆的时候,警报响了,于是保安把阿东拦下,要检查一下哪本书没有登记出借。阿东正准备把每一本书在报警器下过一下,以找出引发警报的书,但是保安露出不屑的眼神:你连二分查找都不会吗?于是保安把书分成两堆,让第一堆过一下报警器,报警器响;于是
阅读全文
摘要:上篇文章用贪心算法解决了区间调度问题:给你很多区间,让你求其中的最大不重叠子集。 其实对于区间相关的问题,还有很多其他类型,本文就来讲讲区间合并问题(Merge Interval)。 LeetCode 第 56 题就是一道相关问题,题目很好理解: 我们解决区间问题的一般思路是先排序,然后观察规律。
阅读全文
摘要:今天来聊一道简单却十分巧妙的算法问题:算出一共有几个和为 k 的子数组。 那我把所有子数组都穷举出来,算它们的和,看看谁的和等于 k 不就行了。 关键是, 如何快速得到某个子数组的和呢 ,比如说给你一个数组 ,让你实现一个接口 ,这个接口要返回 的和,而且会被多次调用,你怎么实现这个接口呢? 因为接
阅读全文
摘要:上篇文章 "洗牌算法详解" 讲到了验证概率算法的蒙特卡罗方法,今天聊点轻松的内容:几个和概率相关的有趣问题。 计算概率有下面两个最简单的原则: 原则一、计算概率一定要有一个参照系,称作「样本空间」,即随机事件可能出现的所有结果。事件 A 发生的概率 = A 包含的样本点 / 样本空间的样本总数。 原
阅读全文