![](https://img-blog.csdnimg.cn/20200327223158957.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Algorithm
记录成长,分享知识。
Gopher大威
双非硕士一枚,自学转计算机,实习,秋招拿下腾讯、华为、京东、360、顺丰、深信服等公司offer。专注于分享计算机基础知识,数据结构与算法,面经等。
展开
-
面试官:你能将遍历二叉树进一步优化到空间复杂度为O(1)吗?
我们知道,在遍历二叉树的时候,不管是用递归的方法,还是用非递归的方法,都无法做到额外空间复杂度为O(1)。这是因为遍历二叉树的递归方法实际上使用了函数栈,非递归的方法使用了申请的栈,两者的额外空间都与树的高度有关,所以空间复杂度为O(H),H为二叉树的高度。那么怎么做到将空间复杂度优化到O(1)呢?这就要用到大名鼎鼎的Morris遍历。一、什么是Morris遍历Morris遍历是二叉树遍历算法的超强进阶算法,与递归、非递归(栈实现)的空间复杂度比较,Morris遍历可以将非递归遍历中的空间复杂度降为O原创 2020-09-10 18:15:19 · 802 阅读 · 0 评论 -
你还在递归遍历二叉树吗?你要的迭代模板在这里
一、递归法递归三部曲:1、确定递归函数的参数和返回值void recursion(TreeNode *root)2、确定终止条件当前节点为空的时候,就返回if(!root) return;3、确定单层递归的逻辑//这里是前序遍历cout << root->val << endl;preorder(root->left);preorder(root->right);我们知道,前序遍历二叉树就是【中左右】,中序遍历二叉树就是【左中右】,后序原创 2020-08-31 12:08:48 · 274 阅读 · 0 评论 -
单调栈解决Next Greater Number一类题
单调栈是什么?单调栈使得每次新元素入栈后,栈内元素都保持有序(单调递增或者单调递减)。单调递增栈:栈中数据出栈的序列为单调递增序列。单调递减栈:栈中数据出栈的序列为单调递减序列。注意:这里所说的递增递减是出栈的顺序,不是栈中数据的顺序。单调栈的应用通过使用单调栈,可以访问到下一个比它大(小)的元素。也就是说在队列或数组中,我们需要通过比较前后元素的大小关系来解决问题时,需要使用单调栈。例如,给一个数组[2, 1, 2, 4, 3],返回每个元素后面第一个比它自身大的数,如果没有就返回-1。第原创 2020-07-01 14:48:19 · 415 阅读 · 0 评论 -
递归问题的三部曲配LeetCode题讲解 c/c++/java三种语言都有
最近在刷LeetCode的时候,遇到了很多可以用递归方法的题,但是对于递归求解还比较懵*,不知道怎么下手,自从看了mata川这位大佬的博客,豁然开朗。本文也是转载至其博客:https://lyl0724.github.io/2020/01/25/1/原博主用了LeetCode中的三道题来讲解,都是Java实现的,对于代码实现部分,我分别用C、C++和Java来实现,方便不同语言使用者理解。一、...转载 2020-05-06 15:15:20 · 311 阅读 · 0 评论 -
求最大公约数你只会用内置函数吗?这三种方法让你有更多的选择。
最大公约数(GCD, Greatest Common Divisor),下文简称GCD,指某几个整数共有约数中最大的那个。一、穷举法这是最直接暴力的方法。从1开始,到a和b中较小的那个数结束,看能不能同时被a, b整除,如果能,即为公约数,这样一个循环下来,一定可以找到GCD。inline int gcd(int a, int b){ int smaller = a < b ? a ...原创 2020-03-29 20:08:27 · 414 阅读 · 0 评论