
栈+单调栈
文章平均质量分 52
就单调栈,和树得深度优先遍历,根左右(前序遍历),后序遍历。
answer_yym
且随疾风前行
展开
-
带*的括号匹配
1、描述给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为有效字符串。示例 1:输入: “()”输出: True示例 2:输入: “(*)”输出: True示例 3:输入: “(*))”输出: True原创 2021-09-12 14:45:43 · 1095 阅读 · 1 评论 -
使用一个辅助栈完成对给出栈完成排序。
2、思路假设初始栈的最终排序结果:从栈顶到栈底依次递增。解题思路:初始栈的最终排序结果:从栈顶到栈底依次递增,那么辅助栈的最终排序结果:从栈顶到栈底依次递减。也就是如果 辅助栈为空 或 初始栈的栈顶元素 > 辅助栈的栈顶元素,从初始栈弹出栈顶元素到辅助栈。如果 初始栈的栈顶元素 < 辅助栈的栈顶元素,保存初始栈的栈顶元素并弹出,这个时候需要将辅助栈里边大于保存元素的数全部压入初始栈,直到辅助栈为空或辅助栈的栈顶元素小于保存元素,此时再将保存元素压入辅助栈。如此循环,直到初始栈为空,原创 2021-09-02 15:36:36 · 161 阅读 · 0 评论 -
二叉树遍历(递归前中后+非递归前中后+层序)
1、二叉树递归遍历1.1、先序(根左右)链接/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullpt原创 2021-08-18 10:02:50 · 122 阅读 · 0 评论 -
栈的压入弹出序列
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以原创 2021-08-02 13:17:44 · 101 阅读 · 0 评论 -
括号匹配
#1、描述给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses著作权归领扣网络所有。商业转载请联系官方授...原创 2020-03-21 23:59:25 · 161 阅读 · 0 评论 -
用list实现栈的基本操作
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。 你所...原创 2020-03-01 07:24:26 · 543 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5/ \2 6/ 1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: true来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权原创 2021-08-01 22:44:09 · 106 阅读 · 0 评论 -
矩阵中战斗力最弱的 K 行
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述给你一个大小为 m * n 的矩阵 mat,矩阵由若干军人和平民组成,分别用 1 和 0 表示。请你返回矩阵中战斗力最弱的 k 行的索引,按从最弱到最强排序。如果第 i 行的军人数量少于第 j 行,或者两行军人数量相同但 i 小于 j,那么我们认为第 i 行的战斗力比第 j 行弱。军人 总是 排在一行中的靠前位置,也就是说 1 总是出现在 0 之前。来源:力扣(LeetCode)链接:https://leetcode原创 2021-08-01 11:42:58 · 208 阅读 · 0 评论 -
1190. 反转每对括号间的子串
1、描述给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。示例 1:输入:s = “(abcd)”输出:“dcba”示例 2:输入:s = “(u(love)i)”输出:“iloveu”来源:力扣(LeetCode)[链接][https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-pa原创 2021-05-26 09:43:51 · 101 阅读 · 0 评论 -
二叉搜索树的迭代器
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则原创 2021-04-20 09:10:09 · 318 阅读 · 0 评论 -
笨阶乘
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code1、描述通常,正整数 n 的阶乘是所有小于或等于 n 的正整数的乘积。例如,factorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1。相反,我们设计了一个笨阶乘 clumsy:在整数的递减序列中,我们以一个固定顺序的操作符序列来依次替换原有的乘法操作符:乘法(*),除法(/),加法(+)和减法(-)。例如,clumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 /原创 2021-04-01 09:43:42 · 125 阅读 · 0 评论 -
后缀表达式求值
1、描述根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入:tokens = [“2”,“1”,"+",“3”,"*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9来源:力扣(LeetCode)链接著作权归领扣网络所有。商业转载请联系官方授权,非原创 2021-03-20 17:00:08 · 341 阅读 · 0 评论 -
下一个更大元素001
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code6、2单调栈+hash映射1、描述496给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,原创 2020-10-06 21:31:08 · 88 阅读 · 0 评论 -
栈实现队列002
文章目录1、描述2、关键字3、思路4、notes5、复杂度6、code6.2没抽取动作的代码1、描述前边还有一篇2、关键字栈、队列3、思路1、两个栈实现一个队列,模拟过程2、还有一个分摊思想:就是当取队列队首元素的时候,可以标记第一个栈的栈底元素,当第二个栈为空时后,可以时间复杂度为O(1)提前把对列的首元素返回出去,(提前消费思想),不过后面还得把该干的活:(转移元素到第二个栈,)都干了。说是分摊思想。4、notes1、把两个栈之间的转移动作抽取出来用一个函数表示,显得更好,pop()p原创 2020-10-06 08:38:03 · 119 阅读 · 0 评论 -
整理去临近大小写字符串001
1、描述1544给你一个由大小写英文字母组成的字符串 s 。一个整理好的字符串中,两个相邻字符 s[i] 和 s[i + 1] 不会同时满足下述条件:0 <= i <= s.length - 2s[i] 是小写字符,但 s[i + 1] 是相同的大写字符;反之亦然 。请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯一的。注意:空字符串也属于整理好的字原创 2020-10-05 11:05:27 · 398 阅读 · 0 评论 -
栈实现队列001
1、描述实现一个MyQueue类,该类用两个栈来实现一个队列。2、关键字用栈实现队列3、思路使用两个栈,push就在第一个栈中压栈,pop()就在第二个栈中操作如果第二个栈为空,就把第一个栈中的元素压栈,4、notes等第二个栈为空,才进行压栈操作5、复杂度时间:O(N)空间:O(N)6、codeclass MyQueue {private: stack<int>st1,st2;public: MyQueue() {} voi原创 2020-09-28 22:24:19 · 106 阅读 · 0 评论 -
棒球计分001
1、描述682你现在是棒球比赛记录员。给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在本轮中获得的积分数。2. “+”(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。3. “D”(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。4. “C”(一个操作,这不是一个回合的分数):表示您获得的最后一个有效 回合的分数是无效的,应该被移除。每一轮的操作都是永久性的,可能会对前一轮和后一轮产生影响。你需要返回你在所有回合中得分的总原创 2020-09-28 19:29:27 · 329 阅读 · 0 评论 -
比较含退格的字符串001
1、描述844给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:S = “ab#c”, T = “ad#c”输出:true解释:S 和 T 都会变成 “ac”。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/backspace-string-compare著作权归领扣网络所有。商业转载请联系官方授权,非商业转原创 2020-09-28 15:11:58 · 143 阅读 · 0 评论 -
自定义栈获取栈最小值001面试题
1、描述请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-stack-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2、关键字自定义栈,获取最小值,时间复杂度是O(1)3、思路使用一个数据结构保存自定义栈的元素,list,queue,deque原创 2020-09-27 11:33:40 · 154 阅读 · 0 评论