From dcbac09ef899ca7115a38c9778d8c410ab25f350 Mon Sep 17 00:00:00 2001 From: youngyangyang04 <826123027@qq.com> Date: Sat, 19 Sep 2020 18:56:42 +0800 Subject: [PATCH] Update --- README.md | 2 +- pics/404.左叶子之和.png | Bin 0 -> 28392 bytes problems/0404.左叶子之和.md | 77 +++++++++++++++ problems/栈与队列总结.md | 156 +++++++++++++++++++++++++++++++ 4 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 pics/404.左叶子之和.png create mode 100644 problems/0404.左叶子之和.md diff --git a/README.md b/README.md index f4e5910e..ea30a4e7 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ # 算法面试思维导图 -![算法面试知识大纲](https://img-blog.csdnimg.cn/20200811091858722.png) +![算法面试知识大纲](https://img-blog.csdnimg.cn/20200729181420491.png) # 算法文章精选 diff --git a/pics/404.左叶子之和.png b/pics/404.左叶子之和.png new file mode 100644 index 0000000000000000000000000000000000000000..81b6d8c2e3781b9ddee7204dac4c07b801cf3a76 GIT binary patch literal 28392 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 V9t{e(uK1O?4KCi!RgT=${{f~!wvhk; literal 0 HcmV?d00001 diff --git a/problems/0404.左叶子之和.md b/problems/0404.左叶子之和.md new file mode 100644 index 00000000..d1a17f7b --- /dev/null +++ b/problems/0404.左叶子之和.md @@ -0,0 +1,77 @@ +## 题目地址 +https://leetcode-cn.com/problems/sum-of-left-leaves/ + +## 思路 + +首先要注意是判断左叶子呢,不是左子树,不要上来想着层序遍历。 + +因为题目中其实没有说清楚左叶子究竟是什么节点,那么我来给出左叶子的明确定义:**如果左节点不为空,且左节点没有左右孩子,那么这个节点就是左叶子** + +大家思考一下如下图中二叉树,左叶子之和究竟是多少? + + + +**其实是0,因为这棵树根本没有左叶子!** + +那么判断左叶子,如果**判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断其左孩子是不是左叶子。** + +判断的根据如下: + +``` + if (node->left != NULL && node->left->left == NULL && node->left->right == NULL) { + sum = node->left->val; + } +``` + +递归写法代码如下: + +## 递归C++代码 + +``` +class Solution { +public: + int sumOfLeftLeaves(TreeNode* root) { + if (root == NULL) return 0; + int sum = 0; + if (root->left != NULL && root->left->left == NULL && root->left->right == NULL) { + sum = root->left->val; + } + return sum + sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right); + } +}; +``` + +递归的过程其实就是二叉树的前序遍历,那么写过二叉树的同学都知道,既然是二叉树的前序遍历,能写出递归,就能写出非递归。 + +如果对二叉树的各种递归和非递归的写法不熟悉,可以看我的这个题解: +[彻底吃透二叉树的前中后序递归法和迭代法!!](https://leetcode-cn.com/problems/binary-tree-inorder-traversal/solution/che-di-chi-tou-er-cha-shu-de-qian-zhong-hou-xu-d-2/) + +那么非递归版本善良登场,判断条件都是一样的 + +## 非递归C++代码 + +``` + +class Solution { +public: + int sumOfLeftLeaves(TreeNode* root) { + stack st; + if (root == NULL) return 0; + st.push(root); + int result = 0; + while (!st.empty()) { + TreeNode* node = st.top(); + st.pop(); + if (node->left != NULL && node->left->left == NULL && node->left->right == NULL) { + result += node->left->val; + } + if (node->right) st.push(node->right); + if (node->left) st.push(node->left); + } + return result; + } + + +}; +``` + diff --git a/problems/栈与队列总结.md b/problems/栈与队列总结.md index e69de29b..81a150c5 100644 --- a/problems/栈与队列总结.md +++ b/problems/栈与队列总结.md @@ -0,0 +1,156 @@ + +> 学习不总结等于白学 + +# 栈与队列的理论基础 + +首先我们在[栈与队列:来看看栈和队列不为人知的一面](https://mp.weixin.qq.com/s/VZRjOccyE09aE-MgLbCMjQ)中讲解了栈和队列的理论基础。 + +里面提到了灵魂四问: + +1. C++中stack,queue 是容器么? +2. 我们使用的stack,queue是属于那个版本的STL? +3. 我们使用的STL中stack,queue是如何实现的? +4. stack,queue 提供迭代器来遍历空间么? + +相信不仅仅是C++中有这些问题,那么大家使用其他编程语言,也可以考虑一下这四个问题,栈和队列是如何实现的。 + +栈与队列是我们熟悉的不能再熟悉的数据结构,但它们的底层实现,很多同学都比较模糊,这其实就是基础所在。 + +可以出一道面试题:栈里面的元素在内存中是连续分布的么? + +这个问题有两个陷阱: + +* 陷阱1:栈是容器适配器,底层容器使用不同的容器,导致栈内数据在内存中是不是连续分布。 +* 陷阱2:缺省情况下,默认底层容器是deque,那么deque的在内存中的数据分布是什么样的呢? 答案是:不连续的,下文也会提到deque。 + +所以这就是考察候选者基础知识扎不扎实的好问题。 + +大家还是要多多重视起来! + +了解了栈与队列基础之后,那么可以用[栈与队列:栈实现队列](https://mp.weixin.qq.com/s/P6tupDwRFi6Ay-L7DT4NVg) 和 [栈与队列:队列实现栈](https://mp.weixin.qq.com/s/yzn6ktUlL-vRG3-m5a8_Yw) 来练习一下栈与队列的基本操作。 + +值得一提的是,用[栈与队列:用队列实现栈还有点别扭](https://mp.weixin.qq.com/s/yzn6ktUlL-vRG3-m5a8_Yw)中,其实只用一个队列就够了。 + +**一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时在去弹出元素就是栈的顺序了。** + +# 栈经典题目 + +## 栈在系统中的应用 + +如果还记得编译原理的话,编译器在 词法分析的过程中处理括号、花括号等这个符号的逻辑,就是使用了栈这种数据结构。 + +再举个例子,linux系统中,cd这个进入目录的命令我们应该再熟悉不过了。 + +``` +cd a/b/c/../../ +``` + +这个命令最后进入a目录,系统是如何知道进入了a目录呢 ,这就是栈的应用。**这在leetcode上也是一道题目,编号:71. 简化路径,大家有空可以做一下。** + +**递归的实现是栈:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中**,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。 + +所以栈在计算机领域中应用是非常广泛的。 + +有的同学经常会想学的这些数据结构有什么用,也开发不了什么软件,大多数同学说的软件应该都是可视化的软件例如APP、网站之类的,那都是非常上层的应用了,底层很多功能的实现都是基础的数据结构和算法。 + +**所以数据结构与算法的应用往往隐藏在我们看不到的地方!** + +## 括号匹配问题 + +在[栈与队列:系统中处处都是栈的应用](https://mp.weixin.qq.com/s/nLlmPMsDCIWSqAtr0jbrpQ)中我们讲解了括号匹配问题。 + +**括号匹配是使用栈解决的经典问题。** + +建议要写代码之前要分析好有哪几种不匹配的情况,如果不动手之前分析好,写出的代码也会有很多问题。 + +先来分析一下 这里有三种不匹配的情况, + +1. 第一种情况,字符串里左方向的括号多余了 ,所以不匹配。 +2. 第二种情况,括号没有多余,但是 括号的类型没有匹配上。 +3. 第三种情况,字符串里右方向的括号多余了,所以不匹配。 + +这里还有一些技巧,在匹配左括号的时候,右括号先入栈,就只需要比较当前元素和栈顶相不相等就可以了,比左括号先入栈代码实现要简单的多了! + +## 字符串去重问题 + +在[栈与队列:匹配问题都是栈的强项](https://mp.weixin.qq.com/s/eynAEbUbZoAWrk0ZlEugqg)中讲解了字符串去重问题。 +1047. 删除字符串中的所有相邻重复项 + +思路就是可以把字符串顺序放到一个栈中,然后如果相同的话 栈就弹出,这样最后栈里剩下的元素都是相邻不相同的元素了。 + +## 逆波兰表达式问题 + +在[栈与队列:有没有想过计算机是如何处理表达式的?](https://mp.weixin.qq.com/s/hneh2nnLT91rR8ms2fm_kw)中讲解了求逆波兰表达式。 + +本题中每一个子表达式要得出一个结果,然后拿这个结果再进行运算,那么**这岂不就是一个相邻字符串消除的过程,和[栈与队列:匹配问题都是栈的强项](https://mp.weixin.qq.com/s/eynAEbUbZoAWrk0ZlEugqg)中的对对碰游戏是不是就非常像了。** + + +# 队列的经典题目 + +## 滑动窗口最大值问题 + +在[栈与队列:滑动窗口里求最大值引出一个重要数据结构](https://mp.weixin.qq.com/s/8c6l2bO74xyMjph09gQtpA)中讲解了一种数据结构:单调队列。 + +这道题目还是比较绕的,如果第一次遇到这种题目,需要反复琢磨琢磨 + +主要思想是**队列没有必要维护窗口里的所有元素,只需要维护有可能成为窗口里最大值的元素就可以了,同时保证队列里的元素数值是由大到小的。** + +那么这个维护元素单调递减的队列就叫做**单调队列,即单调递减或单调递增的队列。C++中没有直接支持单调队列,需要我们自己来一个单调队列** + +而且**不要以为实现的单调队列就是 对窗口里面的数进行排序,如果排序的话,那和优先级队列又有什么区别了呢。** + +设计单调队列的时候,pop,和push操作要保持如下规则: + +1. pop(value):如果窗口移除的元素value等于单调队列的出口元素,那么队列弹出元素,否则不用任何操作 +2. push(value):如果push的元素value大于入口元素的数值,那么就将队列出口的元素弹出,直到push元素的数值小于等于队列入口元素的数值为止 + +保持如上规则,每次窗口移动的时候,只要问que.front()就可以返回当前窗口的最大值。 + +一些同学还会对单调队列都有一些困惑,首先要明确的是,**题解中单调队列里的pop和push接口,仅适用于本题。** + +**单调队列不是一成不变的,而是不同场景不同写法**,总之要保证队列里单调递减或递增的原则,所以叫做单调队列。 + +**不要以为本地中的单调队列实现就是固定的写法。** + +我们用deque作为单调队列的底层数据结构,C++中deque是stack和queue默认的底层实现容器(这个我们之前已经讲过),deque是可以两边扩展的,而且deque里元素并不是严格的连续分布的。 + + +## 求前 K 个高频元素 + +在[栈与队列:求前 K 个高频元素和队列有啥关系?](https://mp.weixin.qq.com/s/8hMwxoE_BQRbzCc7CA8rng)中讲解了求前 K 个高频元素。 + +通过求前 K 个高频元素,引出另一种队列就是**优先级队列**。 + +什么是优先级队列呢? + +其实**就是一个披着队列外衣的堆**,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。 + +而且优先级队列内部元素是自动依照元素的权值排列。那么它是如何有序排列的呢? + +缺省情况下priority_queue利用max-heap(大顶堆)完成对元素的排序,这个大顶堆是以vector为表现形式的complete binary tree(完全二叉树)。 + +什么是堆呢? + +**堆是一颗完全二叉树,树中每个结点的值都不小于(或不大于)其左右孩子的值。** 如果父亲结点是大于等于左右孩子就是大顶堆,小于等于左右孩子就是小顶堆。 + +所以大家经常说的大顶堆(堆头是最大元素),小顶堆(堆头是最小元素),如果懒得自己实现的话,就直接用priority_queue(优先级队列)就可以了,底层实现都是一样的,从小到大排就是小顶堆,从大到小排就是大顶堆。 + +本题就要**使用优先级队列来对部分频率进行排序。** 注意这里是对部分数据进行排序而不需要对所有数据排序! + +所以排序的过程的时间复杂度是O(logk),整个算法的时间复杂度是O(nlogk)。 + +# 总结 + +在栈与队列系列中,我们强调栈与队列的基础,也是很多同学容易忽视的点。 + +使用抽象程度越高的语言,越容易忽视其底层实现,而C++相对来说是比较接近底层的语言。 + +我们用栈实现队列,用队列实现栈来掌握的栈与队列的基本操作。 + +接着,通过括号匹配问题、字符串去重问题、逆波兰表达式问题来系统讲解了栈在系统中的应用,以及使用技巧。 + +通过求滑动窗口最大值,以及前K个高频元素介绍了两种队列:单调队列和优先级队列,这是特殊场景解决问题的利器,是一定要掌握的。 + +好了,栈与队列我们就总结到这里了,接下来Carl就要带大家开启新的篇章了,大家加油! + +