栈
枫流仁武
这个作者很懒,什么都没留下…
展开
-
LeetCode 503 下一个更大元素2
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。from typing import *from co.原创 2021-03-06 07:44:04 · 94 阅读 · 0 评论 -
LeetCode 31 栈的压入,弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {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解释:我们可以按以下顺序执行:push(1), push(2), push(3), pu.原创 2021-01-24 18:07:44 · 64 阅读 · 0 评论 -
LeetCode 1111 有效括号的嵌套深度
有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表示有效括号字符串 A 的嵌套深度。详情参见题末「嵌套深度」部分。有效括号字符串类型与对应的嵌套深度计算方法如下图所示:给你一个「有效括号字符串」 seq,请你将其分成两个不相交的有效括号字符串,A 和B,并使这两个字符串的深度最小。不相交:每个 seq[i] 只能分给 A 和 B 二者中的一个,不能既..原创 2020-12-23 10:17:57 · 121 阅读 · 0 评论 -
LeetCode 316 去除重复字母
给你一个字符串s,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。利用单调栈实现。有关键点,如果一个字母已经在栈中出现了,那么该字母就不应该和栈顶元素比较了。记录每个元素剩余个数。from collections import defaultdictclass Solution: def removeDuplicateLetters(self, s: str) -> str: cnt...原创 2020-12-20 10:15:52 · 243 阅读 · 3 评论 -
LeetCode 145 二叉树的后序遍历
给定一个二叉树,返回它的后序遍历。官方给出的答案:from typing import *from collections import dequeclass Solution: def postorderTraversal(self, root: TreeNode) -> List[int]: if not root: return [] res, stack = [], [] prev = Non..原创 2020-09-29 09:07:27 · 130 阅读 · 0 评论 -
LeetCode 402 移调K位数字
给定一个以字符串表示的非负整数num,移除这个数中的k位数字,使得剩下的数字最小。class Solution: def removeKdigits(self, num: str, k: int) -> str: stack=[] remain_num=len(num)-k for c in num: while k and stack and ord(stack[-1])>ord(c): ...原创 2020-09-21 20:26:39 · 153 阅读 · 0 评论 -
LeetCode 321 拼接最大数
给定长度分别为m和n的两个数组,其元素由0-9构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n)个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大数的长度为k的数组。from typing import *class Solution: def maxNumber(self, nums1: List[int], nums2: List[int], k:...原创 2020-09-21 20:03:22 · 129 阅读 · 0 评论 -
LeetCode 726 原子的数量
种种类型题目利用栈实现很方便。第一次实现的时候超时了,原因在于利用一个带有重复元素的列表来保存当前遇到的原子。这样的话列表可能非常大,效率极低。利用字典解决了这个问题。from collections import defaultdictclass Solution: def countOfAtoms(self, formula: str) -> str: i = 0 len1 = len(formula) tem_dic = d原创 2020-07-06 14:57:17 · 136 阅读 · 0 评论 -
LeetCode 32 最长有效括号
看是很简单的题目,其实挺不好写利用栈解决class Solution: def longestValidParentheses(self, s: str) -> int: stack=[] max_len=0 stack.append((-1,')'))#添加一个哨兵元素,保证栈不为空 for i,c in enumerate(s): if c=='(': stac原创 2020-07-04 15:13:43 · 59 阅读 · 0 评论 -
LeetCode 1028 从先序遍历还原二叉树
class Solution: def recoverFromPreorder(self, S: str) -> TreeNode: stack=[] i=0 while i<len(S): cnt = 0 while i < len(S) and S[i] == '-': cnt += 1 i += 1 ..原创 2020-06-19 08:42:50 · 99 阅读 · 0 评论