栈与队列
leetCode涉及栈与队列的题目
消灭猕猴桃
保持热爱,奔赴山海
展开
-
[leetCode]331. 验证二叉树的前序序列化
题目https://leetcode-cn.com/problems/verify-preorder-serialization-of-a-binary-tree/栈如果为数字则消耗一个插槽增加两个插槽,如果为空节点则消耗一个插槽,判断最后栈是否为空,为空则为有效序列。class Solution { public boolean isValidSerialization(String preorder) { int len = preorder.length();原创 2021-03-12 09:20:10 · 147 阅读 · 0 评论 -
[leetCode]227. 基本计算器 II
题目https://leetcode-cn.com/problems/basic-calculator-ii/递归class Solution { public int calculate(String s) { if (s == null || s.length() == 0) return 0; int len = s.length(); int res = 0; int num = 0; LinkedL原创 2021-03-11 11:29:30 · 100 阅读 · 0 评论 -
[leetCode]71. 简化路径
题目https://leetcode-cn.com/problems/simplify-path/栈以斜杠将字符串分隔,将分割后的字符串加入栈中,遇到 ".“和”“无需入栈遇到”…"则需要弹栈,弹栈需要注意不能溢出。最后通过StringBuilder重新构建字符串。class Solution { public String simplifyPath(String path) { String[] dirs = path.split("/"); Dequ原创 2021-02-09 10:12:16 · 88 阅读 · 0 评论 -
[leetCode]85. 最大矩形
动态规划使用一个二维数组记录每个位置的最大宽度,这样就能在线性时间内计算得到以该点为右下角的最大矩形。class Solution { public int maximalRectangle(char[][] matrix) { if (matrix.length == 0) return 0; int maxarea = 0; int rows = matrix.length; int cols = matrix[0].leng.原创 2020-10-02 10:48:48 · 98 阅读 · 1 评论 -
[leetCode]649. Dota2 参议院
题目链接:https://leetcode-cn.com/problems/dota2-senateDota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:禁止一名参议员的权利:参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。宣布胜利:如果参议员发现有权利投票的参议员都是同一个原创 2020-12-11 10:45:32 · 72 阅读 · 0 评论 -
[leetCode]321. 拼接最大数
题目链接:https://leetcode-cn.com/problems/create-maximum-number给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。说明: 请尽可能地优化你算法的时间和空间复杂度。单调栈思路:通过维护单调栈在原创 2020-12-03 21:11:49 · 125 阅读 · 0 评论 -
[leetCodr]402. 移掉K位数字
题目链接:https://leetcode-cn.com/problems/remove-k-digits给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例 1 :输入: num = "1432219", k = 3输出: "1219"解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。示例 2 :输入: num = "10200",原创 2020-11-15 09:21:44 · 95 阅读 · 0 评论 -
[leetCode]215. 数组中的第K个最大元素
题目链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。原创 2020-11-09 14:55:12 · 68 阅读 · 0 评论 -
[leetCode]973. 最接近原点的 K 个点
题目链接:https://leetcode-cn.com/problems/k-closest-points-to-origin我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。示例 1:输入:points = [[1,3],[-2,2]], K = 1输出:[[-2,2]]解释: (1, 3) 和原点之间的距离为 sqr原创 2020-11-09 11:18:38 · 129 阅读 · 0 评论 -
[leetCode]20.有效括号
该题需要检验一个由括号组成的表达式是否有效,关键思路是:一个正确表达式,它的子表达式也是正确的表达式。这就体现了一种递归结构,由于对结构一无所知所以我们不能从内到外处理这个问题。栈结构在表示问题的递归结构时可以派上用场。算法:初始化栈stack遍历字符串表达式,如果遇到左括号则入栈如果遇到右括号弹出栈顶元素,如果当前右括号与栈顶元素不等则表达式无效,此时栈为空栈表达式也无效遍历结束后栈中仍然存在元素则表达式无效class Solution { public boolean isVa.原创 2020-06-18 20:39:55 · 118 阅读 · 0 评论 -
[leetCode]155.最小栈
辅助栈使用辅助栈记录栈每个状态的最小值class MinStack { private Stack<Integer> dataStack; private Stack<Integer> minStack; /** initialize your data structure here. */ public MinStack() { dataStack = new Stack<>(); minS原创 2020-07-18 15:30:24 · 91 阅读 · 0 评论 -
[leetCode]09.用两个栈实现队列
解法思路:先把元素逐一加入stack1,由于需要实现“先进先出”,因此可以将stack1中的元素pop出来,依次压入stack2,这样就使元素完成了一次“转向”,再从stack2栈顶取出元素,这样就实现了“先进先出”。class CQueue { private LinkedList<Integer> stack1; private LinkedList<Integer> stack2; public CQueue() { stack.原创 2020-08-04 19:55:51 · 123 阅读 · 0 评论 -
[leetCode]剑指 Offer 30. 包含min函数的栈
解法这题的关键是设计一种数据结构,当栈中压入节点时可以同时记录当前栈的最小值class MinStack { class Node{ int val; int min; Node next; public Node(int val, int min){ this.val = val; this.min = min; } } private Linke原创 2020-08-24 07:43:17 · 124 阅读 · 0 评论 -
[leetCode]剑指 Offer 31. 栈的压入、弹出序列
辅助栈使用一个辅助栈,根据弹出序列的元素,将压栈序列元素压入栈中,比如弹出序列第一个元素是4这时栈为空,则将压栈序列中的[1,2,3,4]压入辅助栈,这时栈顶元素和弹出序列需要弹出的元素相同,则将栈顶元素弹出。如果弹出序列要弹出的元素在辅助栈中找不到则在压栈序列中的剩余元素中寻找,如果找到则压栈,如果找不到则说明该弹出序列不是压栈序列的弹出序列。最后如果辅助栈为空则说明匹配成功。class Solution { private Integer index = -1;//记录pushed .原创 2020-08-25 10:25:41 · 99 阅读 · 0 评论 -
[leetCode]剑指 Offer 40. 最小的k个数
解法一 随机切分随机抽取数组中一个元素进行切分并返回该元素下标 index:index == k-1切分元素正好为第k个元素index < k-1第k大的元素在下标为index元素的右边,对index右边的元素进行切分index > k-1第k大的元素在下标为index元素的左边,对index左边的元素进行切分class Solution { Random rand = new Random(); public int[] getLeastNumbers.原创 2020-09-03 21:13:35 · 117 阅读 · 0 评论 -
剑指 Offer 59 - I. 滑动窗口的最大值、II. 队列的最大值
剑指 Offer 59 - I. 滑动窗口的最大值解法使用一个双端队列,头部保存当前滑动窗口的最大值。依次将数字从尾部加入队列,如果该数字比该队列尾部数字大则将队列尾部数字去除。如果如果当前处理的数字下标与队列头部数字的下标差值大于等于3,表明该最大数字已经滑出窗口,那么删除队列头部数字。class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if (nums == null || nums.le原创 2020-09-23 10:54:34 · 93 阅读 · 0 评论 -
[leetCode]面试题 08.09. 括号
class Solution { public List<String> generateParenthesis(int n) { List<String> ans = new LinkedList<>(); backtrack(ans, n, 0, ""); return ans; } // 回溯: left表示可以使用的左括号数,right表示可以使用的右括号数 private voi.原创 2020-10-06 09:30:42 · 164 阅读 · 0 评论 -
[leetCode]150. 逆波兰表达式求值
题目根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入: ["4", "13", "5", "/", "+"]输出:原创 2020-10-30 17:59:21 · 61 阅读 · 0 评论 -
[leetCode]1047. 删除字符串中的所有相邻重复项
题目链接:https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一原创 2020-10-30 17:46:41 · 232 阅读 · 0 评论