随笔分类 -  数据结构系列

摘要:读完本文,你可以去力扣拿下如下题目: 222.完全二叉树的节点个数 如果让你数一下一棵普通二叉树有多少个节点,这很简单,只要在二叉树的遍历框架上加一点代码就行了。 但是,如果给你一棵完全二叉树,让你计算它的节点个数,你会不会?算法的时间复杂度是多少?这个算法的时间复杂度应该是 O(logN*logN 阅读全文
posted @ 2020-11-14 22:52 labuladong 阅读(3283) 评论(1) 推荐(0) 编辑
摘要:给我 O(1) 的时间,我可以删除/查找数组中的任意元素 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 380.常数时间插入、删除和获取随机元素 710.黑名单中的随机数 本文讲两道比较有技巧性的数据结构设计题,都是和随机读取元素相关的,我们前文 水塘抽样算法 也 阅读全文
posted @ 2020-11-14 22:50 labuladong 阅读(1265) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 224.基本计算器 227.基本计算器II 772.基本计算器III 我们最终要实现的计算器功能如下: 1、输入一个字符串,可以包含+ - * /、数字、括号以及空格,你的算法返回运算结果。 2、要符合运算法则,括号的优先级最高,先乘除后加减。 3、除号是整数除 阅读全文
posted @ 2020-11-14 22:49 labuladong 阅读(1214) 评论(1) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 355.设计推特 「design Twitter」是 LeetCode 上第 355 道题目,不仅题目本身很有意思,而且把合并多个有序链表的算法和面向对象设计(OO design)结合起来了,很有实际意义,本文就带大家来看看这道题。 至于 Twitter 的什么 阅读全文
posted @ 2020-11-14 22:47 labuladong 阅读(306) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 100.相同的树 450.删除二叉搜索树中的节点 701.二叉搜索树中的插入操作 700.二叉搜索树中的搜索 98.验证二叉搜索树 通过之前的文章框架思维,二叉树的遍历框架应该已经印到你的脑子里了,这篇文章就来实操一下,看看框架思维是怎么灵活运用,秒杀一切二叉树 阅读全文
posted @ 2020-11-14 22:44 labuladong 阅读(373) 评论(0) 推荐(0) 编辑
摘要:东哥手把手带你刷二叉树(第三期) 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 652.寻找重复的子树 接前文 手把手带你刷二叉树(第一期) 和 手把手带你刷二叉树(第二期),本文继续来刷二叉树。 从前两篇文章的阅读量来看,大家还是能够通过二叉树学习到 框架思维 阅读全文
posted @ 2020-11-14 22:43 labuladong 阅读(1635) 评论(0) 推荐(0) 编辑
摘要:东哥手把手带你刷二叉树(第二期) 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 654.最大二叉树 105.从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树 上篇文章 手把手教你刷二叉树(第一篇) 连刷了三道二叉树题目,很多读者直呼内行。其实 阅读全文
posted @ 2020-11-14 22:41 labuladong 阅读(824) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 226.翻转二叉树 114.二叉树展开为链表 116.填充每个节点的下一个右侧节点指针 我们的成名之作 学习数据结构和算法的框架思维 中多次强调,先刷二叉树的题目,先刷二叉树的题目,先刷二叉树的题目,因为很多经典算法,以及我们前文讲过的所有回溯、动归、分治算法, 阅读全文
posted @ 2020-11-14 22:40 labuladong 阅读(688) 评论(0) 推荐(1) 编辑
摘要:二叉树的序列化和反序列化 JSON 的运用非常广泛,比如我们经常将变成语言中的结构体序列化成 JSON 字符串,存入缓存或者通过网络发送给远端服务,消费者接受 JSON 字符串然后进行反序列化,就可以得到原始数据了。这就是「序列化」和「反序列化」的目的,以某种固定格式组织字符串,使得数据可以独立于编 阅读全文
posted @ 2020-11-14 22:39 labuladong 阅读(2475) 评论(0) 推荐(0) 编辑
摘要:二叉堆(Binary Heap)没什么神秘,性质比二叉搜索树 BST 还简单。其主要操作就两个,sink(下沉)和 swim(上浮),用以维护二叉堆的性质。其主要应用有两个,首先是一种排序方法「堆排序」,第二是一种很有用的数据结构「优先级队列」。 本文就以实现优先级队列(Priority Queue 阅读全文
posted @ 2020-11-14 22:35 labuladong 阅读(534) 评论(0) 推荐(1) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 92.反转链表II 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是否能够递归实现呢? 本文就来由浅入深,step by step 地解决这个问题。如果你还不会递归地反转单链表也没关系,本文会 阅读全文
posted @ 2020-11-14 22:34 labuladong 阅读(138) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 232.用栈实现队列 225.用队列实现栈 队列是一种先进先出的数据结构,栈是一种先进后出的数据结构,形象一点就是这样: 这两种数据结构底层其实都是数组或者链表实现的,只是 API 限定了它们的特性,那么今天就来看看如何使用「栈」的特性来实现一个「队列」,如何用 阅读全文
posted @ 2020-11-14 22:33 labuladong 阅读(636) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 496.下一个更大元素I 503.下一个更大元素II 1118.一月有多少天 栈(stack)是很简单的一种数据结构,先进后出的逻辑顺序,符合某些问题的特点,比如说函数调用栈。 单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持 阅读全文
posted @ 2020-11-14 22:32 labuladong 阅读(381) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 239.滑动窗口最大值 前文讲了一种特殊的数据结构「单调栈」monotonic stack,解决了一类问题「Next Greater Number」,本文写一个类似的数据结构「单调队列」。 也许这种数据结构的名字你没听过,其实没啥难的,就是一个「队列」,只是使用 阅读全文
posted @ 2020-11-14 22:31 labuladong 阅读(206) 评论(0) 推荐(0) 编辑
摘要:层层拆解,带你手写 LFU 算法 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 460.LFU缓存机制 上篇文章 带你手写LRU算法 写了 LRU 缓存淘汰算法的实现方法,本文来写另一个著名的缓存淘汰算法:LFU 算法。 LRU 算法的淘汰策略是 Least Re 阅读全文
posted @ 2020-11-14 22:29 labuladong 阅读(1615) 评论(0) 推荐(0) 编辑
摘要:通过之前的文章 "框架思维" ,二叉树的遍历框架应该已经印到你的脑子里了,这篇文章就来实操一下,看看框架思维是怎么灵活运用,秒杀一切二叉树问题的。 二叉树算法的设计的总路线:明确一个节点要做的事情,然后剩下的事抛给框架。 举两个简单的例子体会一下这个思路,热热身。 1. 如何把二叉树所有的节点中的值 阅读全文
posted @ 2020-02-17 12:21 labuladong 阅读(407) 评论(0) 推荐(0) 编辑
摘要:我们最终要实现的计算器功能如下: 1、输入一个字符串,可以包含 、数字、括号以及空格,你的算法返回运算结构。 2、要符合运算法则,括号的优先级最高,先乘除后加减。 3、除号是整数除法,无论正负都向 0 取整(5/2=2, 5/2= 2)。 4、可以假定输入的算式一定合法,且计算过程不会出现整型溢出, 阅读全文
posted @ 2020-02-17 12:18 labuladong 阅读(733) 评论(0) 推荐(0) 编辑
摘要:前文讲了一种特殊的数据结构「单调栈」monotonic stack,解决了一类问题「Next Greater Number」,本文写一个类似的数据结构「单调队列」。 也许这种数据结构的名字你没听过,其实没啥难的,就是一个「队列」,只是使用了一点巧妙的方法,使得队列中的元素单调递增(或递减)。这个数据 阅读全文
posted @ 2020-02-17 12:16 labuladong 阅读(487) 评论(0) 推荐(0) 编辑
摘要:反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是否能 够递归实现 呢? 本文就来由浅入深,step by step 地解决这个问题。如果你还不会递归地反转单链表也没关系, 本文会从递归反转整个单链表开始拓展 ,只要你明白单链表的结 阅读全文
posted @ 2020-02-17 10:11 labuladong 阅读(599) 评论(0) 推荐(0) 编辑
摘要:这是好久之前的一篇文章「学习数据结构和算法的框架思维」的修订版。之前那篇文章收到广泛好评,没看过也没关系,这篇文章会涵盖之前的所有内容,并且会举很多代码的实例,教你如何使用框架思维。 首先,这里讲的都是普通的数据结构,咱不是搞算法竞赛的,野路子出生,我只会解决常规的问题。另外,以下是我个人的经验的总 阅读全文
posted @ 2020-02-17 10:08 labuladong 阅读(1938) 评论(0) 推荐(1) 编辑

我的公众号 labuladong,专注于 LeetCode 刷题,欢迎关注。