![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
栈
练习
会飞的鸡翅膀
这个作者很懒,什么都没留下…
展开
-
316. 去除重复字母
题目描述给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。注意:该题与 1081 https://leetcode-cn.com/problems/smallest-subsequence-of-distinct-characters 相同示例 1:输入:s = “bcabc”输出:“abc”示例 2:输入:s = “cbacdcbc”输出:“acdb”提示:1 <= s.length原创 2020-11-30 22:27:22 · 130 阅读 · 0 评论 -
85. 最大矩形
题目描述给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例 1:输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出:6解释:最大矩形如上图所示。示例 2:输入:matrix = []输出:0示例 3:输入:matrix = [[“0”]]输出:原创 2020-11-27 21:34:41 · 45 阅读 · 0 评论 -
84. 柱状图中最大的矩形
题目描述给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。示例:输入: [2,1,5,6,2,3]输出: 10来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/largest-rectangle-i原创 2020-11-26 22:33:07 · 56 阅读 · 1 评论 -
42. 接雨水
题目描述给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length0 <= n &l原创 2020-11-18 22:59:22 · 60 阅读 · 0 评论 -
225. 用队列实现栈
题目描述使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 isempty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。你可以假设所有操作都是有效的(例如,原创 2020-11-17 16:17:12 · 48 阅读 · 0 评论 -
682. 棒球比赛
题目描述你现在是一场采特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:整数 x - 表示本回合新获得分数 x“+” - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。“D” - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的原创 2020-11-17 15:56:17 · 105 阅读 · 0 评论 -
907. 子数组的最小值之和
题目描述给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组。由于答案可能很大,因此返回答案模 10^9 + 7。示例:输入:[3,1,2,4]输出:17解释:子数组为 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。最小值为 3,1,2,4,1,1,2,1,1,1,和为 17。提示:1 <= A <= 300001 <= A[i] <=原创 2020-11-17 15:35:43 · 94 阅读 · 0 评论 -
856. 括号的分数
题目描述给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。示例 1:输入: “()”输出: 1示例 2:输入: “(())”输出: 2示例 3:输入: “()()”输出: 2示例 4:输入: “(()(()))”输出: 6提示:S 是平衡括号字符串,且只含有 ( 和 ) 。2 <= S.length &l原创 2020-11-16 21:19:08 · 47 阅读 · 0 评论 -
636. 函数的独占时间
题目描述给出一个非抢占单线程CPU的 n 个函数运行日志,找到函数的独占时间。每个函数都有一个唯一的 Id,从 0 到 n-1,函数可能会递归调用或者被其他函数调用。日志是具有以下格式的字符串:function_id:start_or_end:timestamp。例如:“0:start:0” 表示函数 0 从 0 时刻开始运行。“0: end :0” 表示函数 0 在 0 时刻结束。函数的独占时间定义是在该方法中花费的时间,调用其他函数花费的时间不算该函数的独占时间。你需要根据函数的 Id 有序地返原创 2020-11-12 19:32:37 · 117 阅读 · 0 评论 -
144. 二叉树的前序遍历
题目描述给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内-100 <= Node.val &l原创 2020-11-12 15:27:35 · 48 阅读 · 0 评论 -
103. 二叉树的锯齿形层次遍历
题目描述给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],返回锯齿形层次遍历如下:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal思路用两个栈,一个从右往左存,一个从左往右存。/** * Definition for原创 2020-11-12 14:39:43 · 84 阅读 · 0 评论 -
556. 下一个更大元素 III
题目描述给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。示例 1:输入: 12输出: 21示例 2:输入: 21输出: -1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/next-greater-element-iii思路class Solution { public int nextGreaterElement(int原创 2020-11-11 22:55:12 · 141 阅读 · 0 评论 -
503. 下一个更大元素 II
题目描述给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。注意: 输入数组的长度不会超过 10000。来源:原创 2020-11-05 16:42:31 · 32 阅读 · 0 评论 -
496. 下一个更大元素 I
题目描述给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释:对于num1中的数字4,你无法在第二个数组中找到下一个更大原创 2020-11-05 15:26:16 · 139 阅读 · 0 评论 -
71. 简化路径
题目描述以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。示原创 2020-11-05 14:43:09 · 45 阅读 · 0 评论 -
232. 用栈实现队列
题目描述请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top,原创 2020-11-02 19:11:24 · 59 阅读 · 0 评论 -
94. 二叉树的中序遍历
题目描述给定一个二叉树,返回它的中序 遍历。示例:进阶: 递归算法很简单,你可以通过迭代算法完成吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路用栈先存储左子树,然后在出栈的时候判断该结点的右结点是否有左子树,有则添加左子树并用list存储该结点的值,没有则直接用list存该结点的值。/** * De原创 2020-11-02 16:39:20 · 101 阅读 · 0 评论 -
150. 逆波兰表达式求值
题目描述根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, “*”]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入: [“4”, “13”, “5”, “/”, “+”]原创 2020-11-02 11:21:48 · 164 阅读 · 0 评论 -
341. 扁平化嵌套列表迭代器
题目描述给你一个嵌套的整型列表。请你设计一个迭代器,使其能够遍历这个整型列表中的所有整数。列表中的每一项或者为一个整数,或者是另一个列表。其中列表的元素也可能是整数或是其他列表。示例 1:输入: [[1,1],2,[1,1]]输出: [1,1,2,1,1]解释: 通过重复调用 next 直到 hasNext 返回 false,next 返回的元素的顺序应该是: [1,1,2,1,1]。示例 2:输入: [1,[4,[6]]]输出: [1,4,6]解释: 通过重复调用 next 直到原创 2020-11-02 10:57:53 · 86 阅读 · 0 评论 -
394. 字符串解码
题目描述给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例 1:输入:s = “3[a]2[bc]”输出:“aaabcbc”示例 2:原创 2020-11-01 22:47:44 · 47 阅读 · 0 评论 -
1130. 叶值的最小代价生成树
题目描述给你一个正整数数组 arr,考虑所有满足以下条件的二叉树:每个节点都有 0 个或是 2 个子节点。数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。(知识回顾:如果一个节点有 0 个子节点,那么该节点为叶节点。)每个非叶节点的值等于其左子树和右子树中叶节点的最大值的乘积。在所有这样的二叉树中,返回每个非叶节点的值的最小可能总和。这个和的值是一个 32 位整数。示例:提示:2 <= arr.length <= 401 <= arr[i] <=原创 2020-10-31 11:40:17 · 84 阅读 · 0 评论 -
173. 二叉搜索树迭代器
题目描述实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。示例:BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回 trueiterator.next(); // 返回 9iterator.hasNext(); /原创 2020-10-30 19:59:42 · 94 阅读 · 0 评论 -
739. 每日温度
题目描述请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。来源:力扣(LeetCode)链接原创 2020-10-30 18:51:38 · 75 阅读 · 0 评论 -
155. 最小栈
题目描述设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,nul原创 2020-10-27 16:46:40 · 38 阅读 · 0 评论