摘要:
读完本文,你可以去力扣拿下如下题目: 130.被围绕的区域 990.等式方程的可满足性 希望你已经读了这篇题解 Union-Find 算法详解 上篇文章很多读者对于 Union-Find 算法的应用表示很感兴趣,这篇文章就拿几道 LeetCode 题目来讲讲这个算法的巧妙用法。 首先,复习一下,Un 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 236.二叉树的最近公共祖先 如果说笔试的时候喜欢考各种动归回溯的骚操作,面试其实最喜欢考比较经典的问题,难度不算太大,而且也比较实用。 上篇文章 四个命令玩转 Git 写了 Git 最常用的命令,没有提分支合并,其实分支合并没什么困难的,主要就是 merge 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 560.和为K的子数组 今天来聊一道简单却十分巧妙的算法问题:算出一共有几个和为 k 的子数组。 那我把所有子数组都穷举出来,算它们的和,看看谁的和等于 k 不就行了。 关键是,如何快速得到某个子数组的和呢,比如说给你一个数组 nums,让你实现一个接口 sum 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 43.字符串相乘 对于比较小的数字,做运算可以直接使用编程语言提供的运算符,但是如果相乘的两个因数非常大,语言提供的数据类型可能就会溢出。一种替代方案就是,运算数以字符串的形式输入,然后模仿我们小学学习的乘法算术过程计算出结果,并且也用字符串表示。 需要注意的是 阅读全文
摘要:
今天讲讲 Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。名词很高端,其实特别好理解,等会解释,另外这个算法的应用都非常有趣。 说起这个 Union-Find,应该算是我的「启蒙算法」了,因为《算法4》的开头就介绍了这款算法,可是把我秀翻了,感觉好精妙啊!后 阅读全文
摘要:
首先说明一个问题,简单阐述一下递归,分治算法,动态规划,贪心算法这几个东西的区别和联系,心里有个印象就好。 递归是一种编程技巧,一种解决问题的思维方式;分治算法和动态规划很大程度上是递归思想基础上的(虽然动态规划的最终版本大都不是递归了,但解题思想还是离不开递归),解决更具体问题的两类算法思想;贪心 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 191.位1的个数 231.2的幂 本文分两部分,第一部分列举几个有趣的位操作,第二部分讲解算法中常用的 n & (n - 1) 操作,顺便把用到这个技巧的算法题列出来讲解一下。因为位操作很简单,所以假设读者已经了解与、或、异或这三种基本操作。 位操作(Bit 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 354.俄罗斯套娃信封问题 很多算法问题都需要排序技巧,其难点不在于排序本身,而是需要巧妙地排序进行预处理,将算法问题进行转换,为之后的操作打下基础。 信封嵌套问题就需要先按特定的规则排序,之后就转换为一个 最长递增子序列问题 的技巧来解决了。 一、题目概述 信 阅读全文
摘要:
通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友。由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜。我这免费写给你看,多宣传原创作者是你唯一能做的,谁也不希望劣币驱逐良币对吧? 这是好久之前的一篇文章「学习数据结构和算法的框架思 阅读全文
摘要:
二分搜索怎么用?我和快手面试官进行了深度探讨 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 410.分割数组的最大值 经常有读者问我,读了之前的爆文 二分查找框架详解 之后,二分查找的算法他写的很溜了,但仅仅局限于在数组中搜索元素,不知道底怎么在算法题里面运用二分 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 704.二分查找 34.在排序数组中查找元素的第一个和最后一个位置 先给大家讲个笑话乐呵一下: 有一天阿东到图书馆借了 N 本书,出图书馆的时候,警报响了,于是保安把阿东拦下,要检查一下哪本书没有登记出借。阿东正准备把每一本书在报警器下过一下,以找出引发警报的书 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 384.打乱数组 我知道大家会各种花式排序算法,但是如果叫你打乱一个数组,你是否能做到胸有成竹?即便你拍脑袋想出一个算法,怎么证明你的算法就是正确的呢?乱序算法不像排序算法,结果唯一可以很容易检验,因为「乱」可以有很多种,你怎么能证明你的算法是「真的乱」呢? 所 阅读全文
摘要:
通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友。由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜。我这免费写给你看,多宣传原创作者是你唯一能做的,谁也不希望劣币驱逐良币对吧? 咱们的公众号有很多硬核的算法文章,今天就聊点轻松的 阅读全文
摘要:
之前发的那篇关于框架性思维的文章,我也发到了不少其他圈子,受到了大家的普遍好评,这一点我真的没想到,首先感谢大家的认可,我会更加努力,写出通俗易懂的算法文章。 有很多朋友问我数据结构和算法到底该怎么学,尤其是很多朋友说自己是「小白」,感觉这些东西好难啊,就算看了之前的「框架思维」,也感觉自己刷题乏力 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 141.环形链表 141.环形链表II 167.两数之和 II - 输入有序数组 我把双指针技巧再分为两类,一类是「快慢指针」,一类是「左右指针」。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 295.数据流的中位数 如果输入一个数组,让你求中位数,这个好办,排个序,如果数组长度是奇数,最中间的一个元素就是中位数,如果数组长度是偶数,最中间两个元素的平均数作为中位数。 如果数据规模非常巨大,排序不太现实,那么也可以使用概率算法,随机抽取一部分数据,排序 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 969.煎饼排序 烧饼排序是个很有意思的实际问题:假设盘子上有 n 块面积大小不一的烧饼,你如何用一把锅铲进行若干次翻转,让这些烧饼的大小有序(小的在上,大的在下)? 设想一下用锅铲翻转一堆烧饼的情景,其实是有一点限制的,我们每次只能将最上面的若干块饼子翻转: 阅读全文
摘要:
一文秒杀三道区间集合题目 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 1288.删除被覆盖区间 56.区间合并 986.区间列表的交集 经常有读者问区间相关的问题,今天写一篇文章,秒杀三道区间相关的问题。 所谓区间问题,就是线段问题,让你合并所有线段、找出线段的 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 986.区间列表的交集 本文是区间系列问题的第三篇,前两篇分别讲了区间的最大不相交子集和重叠区间的合并,今天再写一个算法,可以快速找出两组区间的交集。 先看下题目,LeetCode 第 986 题就是这个问题: 题目很好理解,就是让你找交集,注意区间都是闭区间。 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 56.合并区间 上篇文章用贪心算法解决了区间调度问题:给你很多区间,让你求其中的最大不重叠子集。 其实对于区间相关的问题,还有很多其他类型,本文就来讲讲区间合并问题(Merge Interval)。 LeetCode 第 56 题就是一道相关问题,题目很好理解: 阅读全文