摘要: 读完本文,你可以去力扣拿下如下题目: 222.完全二叉树的节点个数 如果让你数一下一棵普通二叉树有多少个节点,这很简单,只要在二叉树的遍历框架上加一点代码就行了。 但是,如果给你一棵完全二叉树,让你计算它的节点个数,你会不会?算法的时间复杂度是多少?这个算法的时间复杂度应该是 O(logN*logN 阅读全文
posted @ 2020-11-14 22:52 labuladong 阅读(3215) 评论(1) 推荐(0) 编辑
摘要: 给我 O(1) 的时间,我可以删除/查找数组中的任意元素 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 380.常数时间插入、删除和获取随机元素 710.黑名单中的随机数 本文讲两道比较有技巧性的数据结构设计题,都是和随机读取元素相关的,我们前文 水塘抽样算法 也 阅读全文
posted @ 2020-11-14 22:50 labuladong 阅读(1159) 评论(0) 推荐(0) 编辑
摘要: 读完本文,你可以去力扣拿下如下题目: 224.基本计算器 227.基本计算器II 772.基本计算器III 我们最终要实现的计算器功能如下: 1、输入一个字符串,可以包含+ - * /、数字、括号以及空格,你的算法返回运算结果。 2、要符合运算法则,括号的优先级最高,先乘除后加减。 3、除号是整数除 阅读全文
posted @ 2020-11-14 22:49 labuladong 阅读(1173) 评论(1) 推荐(0) 编辑
摘要: 读完本文,你可以去力扣拿下如下题目: 355.设计推特 「design Twitter」是 LeetCode 上第 355 道题目,不仅题目本身很有意思,而且把合并多个有序链表的算法和面向对象设计(OO design)结合起来了,很有实际意义,本文就带大家来看看这道题。 至于 Twitter 的什么 阅读全文
posted @ 2020-11-14 22:47 labuladong 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 读完本文,你可以去力扣拿下如下题目: 100.相同的树 450.删除二叉搜索树中的节点 701.二叉搜索树中的插入操作 700.二叉搜索树中的搜索 98.验证二叉搜索树 通过之前的文章框架思维,二叉树的遍历框架应该已经印到你的脑子里了,这篇文章就来实操一下,看看框架思维是怎么灵活运用,秒杀一切二叉树 阅读全文
posted @ 2020-11-14 22:44 labuladong 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 东哥手把手带你刷二叉树(第三期) 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 652.寻找重复的子树 接前文 手把手带你刷二叉树(第一期) 和 手把手带你刷二叉树(第二期),本文继续来刷二叉树。 从前两篇文章的阅读量来看,大家还是能够通过二叉树学习到 框架思维 阅读全文
posted @ 2020-11-14 22:43 labuladong 阅读(1594) 评论(0) 推荐(0) 编辑
摘要: 东哥手把手带你刷二叉树(第二期) 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 654.最大二叉树 105.从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树 上篇文章 手把手教你刷二叉树(第一篇) 连刷了三道二叉树题目,很多读者直呼内行。其实 阅读全文
posted @ 2020-11-14 22:41 labuladong 阅读(797) 评论(0) 推荐(0) 编辑
摘要: 读完本文,你可以去力扣拿下如下题目: 226.翻转二叉树 114.二叉树展开为链表 116.填充每个节点的下一个右侧节点指针 我们的成名之作 学习数据结构和算法的框架思维 中多次强调,先刷二叉树的题目,先刷二叉树的题目,先刷二叉树的题目,因为很多经典算法,以及我们前文讲过的所有回溯、动归、分治算法, 阅读全文
posted @ 2020-11-14 22:40 labuladong 阅读(655) 评论(0) 推荐(1) 编辑
摘要: 二叉树的序列化和反序列化 JSON 的运用非常广泛,比如我们经常将变成语言中的结构体序列化成 JSON 字符串,存入缓存或者通过网络发送给远端服务,消费者接受 JSON 字符串然后进行反序列化,就可以得到原始数据了。这就是「序列化」和「反序列化」的目的,以某种固定格式组织字符串,使得数据可以独立于编 阅读全文
posted @ 2020-11-14 22:39 labuladong 阅读(2387) 评论(0) 推荐(0) 编辑
摘要: 二叉堆(Binary Heap)没什么神秘,性质比二叉搜索树 BST 还简单。其主要操作就两个,sink(下沉)和 swim(上浮),用以维护二叉堆的性质。其主要应用有两个,首先是一种排序方法「堆排序」,第二是一种很有用的数据结构「优先级队列」。 本文就以实现优先级队列(Priority Queue 阅读全文
posted @ 2020-11-14 22:35 labuladong 阅读(462) 评论(0) 推荐(1) 编辑
摘要: 读完本文,你可以去力扣拿下如下题目: 92.反转链表II 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是否能够递归实现呢? 本文就来由浅入深,step by step 地解决这个问题。如果你还不会递归地反转单链表也没关系,本文会 阅读全文
posted @ 2020-11-14 22:34 labuladong 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 读完本文,你可以去力扣拿下如下题目: 232.用栈实现队列 225.用队列实现栈 队列是一种先进先出的数据结构,栈是一种先进后出的数据结构,形象一点就是这样: 这两种数据结构底层其实都是数组或者链表实现的,只是 API 限定了它们的特性,那么今天就来看看如何使用「栈」的特性来实现一个「队列」,如何用 阅读全文
posted @ 2020-11-14 22:33 labuladong 阅读(618) 评论(0) 推荐(0) 编辑
摘要: 读完本文,你可以去力扣拿下如下题目: 496.下一个更大元素I 503.下一个更大元素II 1118.一月有多少天 栈(stack)是很简单的一种数据结构,先进后出的逻辑顺序,符合某些问题的特点,比如说函数调用栈。 单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持 阅读全文
posted @ 2020-11-14 22:32 labuladong 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 读完本文,你可以去力扣拿下如下题目: 239.滑动窗口最大值 前文讲了一种特殊的数据结构「单调栈」monotonic stack,解决了一类问题「Next Greater Number」,本文写一个类似的数据结构「单调队列」。 也许这种数据结构的名字你没听过,其实没啥难的,就是一个「队列」,只是使用 阅读全文
posted @ 2020-11-14 22:31 labuladong 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 层层拆解,带你手写 LFU 算法 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 460.LFU缓存机制 上篇文章 带你手写LRU算法 写了 LRU 缓存淘汰算法的实现方法,本文来写另一个著名的缓存淘汰算法:LFU 算法。 LRU 算法的淘汰策略是 Least Re 阅读全文
posted @ 2020-11-14 22:29 labuladong 阅读(1515) 评论(0) 推荐(0) 编辑
摘要: 读者经常让我写刷题路线,我觉得这些东西太枯燥了,今天就编一个故事讲讲。 这要从小东开始学习技术开始讲起。 小东是一个目标明确的人,自从上了大学就在琢磨怎么才能找高薪工作多赚钱。他发现做程序员工资挺高,而且有大量优秀的 在线练习平台,所以毅然决定入坑。 计算机的几大基础,Linux 操作系统当然是必知 阅读全文
posted @ 2020-11-14 22:26 labuladong 阅读(618) 评论(0) 推荐(0) 编辑
摘要: 好吧,我也做了回标题党,像我这么细心的同学,怎么可能让服务器被入侵呢? 其实是这样的,昨天我和一个朋友聊天,他说他自己有一台云服务器运行了 Redis 数据库,有一天突然发现数据库里的数据全没了,只剩下一个奇奇怪怪的键值对,其中值看起来像一个 RSA 公钥的字符串,他以为是误操作删库了,幸好自己的服 阅读全文
posted @ 2020-11-14 22:23 labuladong 阅读(291) 评论(0) 推荐(0) 编辑
摘要: 虽说我没事就喜欢喷应试教育,但我也从应试教育中发现了一个窍门:如果能够以刷题的形式学习某项技能,效率和效果是最佳的。对于技术的学习,我经常面临的困境是,理论知识知道的不少,但是有的场景实在无法模拟,缺少亲自动手实践的机会,如果能有一本带标准答案的习题册让我刷刷就好了。 所以在学习新技术时,我首先会去 阅读全文
posted @ 2020-11-14 22:22 labuladong 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 说到密码,我们第一个想到的就是登陆账户的密码,但是从密码学的角度来看,这种根本就不算合格的密码。 为什么呢,因为我们的账户密码,是依靠隐蔽性来达到加密作用:密码藏在我心里,你不知道,所以你登不上我的账户。 然而密码技术认为,「保密」信息总有一天会被扒出来,所以加密算法不应该依靠「保密」来保证机密性, 阅读全文
posted @ 2020-11-14 22:20 labuladong 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 说到进程,恐怕面试中最常见的问题就是线程和进程的关系了,那么先说一下答案:在 Linux 系统中,进程和线程几乎没有区别。 Linux 中的进程就是一个数据结构,看明白就可以理解文件描述符、重定向、管道命令的底层工作原理,最后我们从操作系统的角度看看为什么说线程和进程基本没有区别。 PS:我认真写了 阅读全文
posted @ 2020-11-14 22:18 labuladong 阅读(438) 评论(0) 推荐(0) 编辑
我的公众号 labuladong,专注于 LeetCode 刷题,欢迎关注。