摘要:
东哥手把手带你刷二叉树(第二期) 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 654.最大二叉树 105.从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树 上篇文章 手把手教你刷二叉树(第一篇) 连刷了三道二叉树题目,很多读者直呼内行。其实 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 226.翻转二叉树 114.二叉树展开为链表 116.填充每个节点的下一个右侧节点指针 我们的成名之作 学习数据结构和算法的框架思维 中多次强调,先刷二叉树的题目,先刷二叉树的题目,先刷二叉树的题目,因为很多经典算法,以及我们前文讲过的所有回溯、动归、分治算法, 阅读全文
摘要:
二叉树的序列化和反序列化 JSON 的运用非常广泛,比如我们经常将变成语言中的结构体序列化成 JSON 字符串,存入缓存或者通过网络发送给远端服务,消费者接受 JSON 字符串然后进行反序列化,就可以得到原始数据了。这就是「序列化」和「反序列化」的目的,以某种固定格式组织字符串,使得数据可以独立于编 阅读全文
摘要:
二叉堆(Binary Heap)没什么神秘,性质比二叉搜索树 BST 还简单。其主要操作就两个,sink(下沉)和 swim(上浮),用以维护二叉堆的性质。其主要应用有两个,首先是一种排序方法「堆排序」,第二是一种很有用的数据结构「优先级队列」。 本文就以实现优先级队列(Priority Queue 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 92.反转链表II 反转单链表的迭代实现不是一个困难的事情,但是递归实现就有点难度了,如果再加一点难度,让你仅仅反转单链表中的一部分,你是否能够递归实现呢? 本文就来由浅入深,step by step 地解决这个问题。如果你还不会递归地反转单链表也没关系,本文会 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 232.用栈实现队列 225.用队列实现栈 队列是一种先进先出的数据结构,栈是一种先进后出的数据结构,形象一点就是这样: 这两种数据结构底层其实都是数组或者链表实现的,只是 API 限定了它们的特性,那么今天就来看看如何使用「栈」的特性来实现一个「队列」,如何用 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 496.下一个更大元素I 503.下一个更大元素II 1118.一月有多少天 栈(stack)是很简单的一种数据结构,先进后出的逻辑顺序,符合某些问题的特点,比如说函数调用栈。 单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持 阅读全文
摘要:
读完本文,你可以去力扣拿下如下题目: 239.滑动窗口最大值 前文讲了一种特殊的数据结构「单调栈」monotonic stack,解决了一类问题「Next Greater Number」,本文写一个类似的数据结构「单调队列」。 也许这种数据结构的名字你没听过,其实没啥难的,就是一个「队列」,只是使用 阅读全文
摘要:
层层拆解,带你手写 LFU 算法 读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 460.LFU缓存机制 上篇文章 带你手写LRU算法 写了 LRU 缓存淘汰算法的实现方法,本文来写另一个著名的缓存淘汰算法:LFU 算法。 LRU 算法的淘汰策略是 Least Re 阅读全文
摘要:
读者经常让我写刷题路线,我觉得这些东西太枯燥了,今天就编一个故事讲讲。 这要从小东开始学习技术开始讲起。 小东是一个目标明确的人,自从上了大学就在琢磨怎么才能找高薪工作多赚钱。他发现做程序员工资挺高,而且有大量优秀的 在线练习平台,所以毅然决定入坑。 计算机的几大基础,Linux 操作系统当然是必知 阅读全文