栈
csu_xiji
这个作者很懒,什么都没留下…
展开
-
力扣 726. 原子的数量 栈+map
https://leetcode-cn.com/problems/number-of-atoms/思路:对于括号序列问题,一般都可以用递归或者栈来求解。两种解法本质上都是对给定序列进行分层,即遇到左括号进入更深的一层,遇到右括号退出当前层。考虑到每一层中要统计每一个原子出现的次数,我们可以用哈希表来计数,但是结果要求按照字典序排序,因此可以使用mapmapmap计数,这样可以省去最后的排序步骤。那么如何在给定序列中解析出原子对应的字符串呢?以大写字母开头,后面跟一串小写字母。解析数字比较简单,直接看代码原创 2021-07-06 00:42:05 · 124 阅读 · 0 评论 -
力扣 227. 基本计算器 II 栈
https://leetcode-cn.com/problems/basic-calculator-ii/思路一:把输入字符串转换为运算符序列和数字序列,那么就可以先算除法和乘法(从左至右的顺序),再算加法和减法。class Solution {public: int calculate(string s) { using ll=long long; vector<ll> nums; vector<short> op;原创 2021-03-11 14:57:17 · 112 阅读 · 0 评论 -
力扣 224. 基本计算器 模拟 栈
https://leetcode-cn.com/problems/basic-calculator/思路:好无聊的题目啊……注意细节就行了,可以直接上递归。class Solution {public: using pr=pair<int,int>; pr dfs(const string &s,int idx) { int n=s.size(),sum=0,tmp=0,sign=1; while(idx<n)原创 2021-03-10 00:48:58 · 150 阅读 · 0 评论 -
力扣 150. 逆波兰表达式求值 栈
https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/思路:搞个栈模拟一下就行。遇到运算符弹出栈顶的两个数计算出结果再压进去即可。class Solution {public: int evalRPN(vector<string>& tokens) { stack<int> s; for(auto str:tokens){ if原创 2020-08-20 21:28:09 · 175 阅读 · 0 评论 -
力扣 394. 字符串解码 栈 模拟
https://leetcode-cn.com/problems/decode-string/思路:一个数字栈,一个字符串栈,遇到数字就计算出对应的数然后压倒数字栈中,遇到左括号,向字符串栈中压入一个空串表示进入了新的一层,遇到字符就将其加到字符串栈顶的后面,遇到右括号表明当前层终止了,弹出字符串栈顶和数字栈顶,计算出对应的字符串再加到字符串栈顶的后面即可(相当于加到了上一层的后面)。class Solution {public: string decodeString(string s)原创 2020-08-20 21:12:01 · 119 阅读 · 0 评论 -
力扣 1209. 删除字符串中的所有相邻重复项 II 栈 模拟
https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string-ii/思路:用栈模拟即可,加一个计数的提高效率。class Solution {public: string removeDuplicates(string s, int k) { string ans; if(k==1) return ans; using pr=pair&原创 2020-08-14 14:20:01 · 165 阅读 · 0 评论 -
力扣 103. 二叉树的锯齿形层次遍历 栈 模拟
https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/思路:搞两个栈模拟一下即可,具体看代码。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x),原创 2020-08-14 13:41:02 · 154 阅读 · 0 评论 -
力扣 1190. 反转每对括号间的子串 栈
https://leetcode-cn.com/problems/reverse-substrings-between-each-pair-of-parentheses/思路:用栈来模拟,当遇到(((时,说明即将进入新的一层,所以需要将之前计算出的字符串curcurcur压入栈内,当遇到)))时,应当翻转当前的字符串curcurcur,然后弹出栈顶元素,把栈顶元素+翻转后的字符串当作curcurcur。class Solution {public: string reverseParenth原创 2020-08-14 00:19:21 · 217 阅读 · 0 评论 -
力扣 946. 验证栈序列 栈
https://leetcode-cn.com/problems/validate-stack-sequences/思路:建立一个辅助栈,无非以下几种情况:(1)pushedi=popedj(1)pushed_i=poped_j(1)pushedi=popedj,那么直接自增i、ji、ji、j即可,相当于进栈后立即出栈;(2)(2)(2)栈非空且栈顶元素等于popedjpoped_jpopedj,那么弹出栈顶元素即可;(3)i<pushed.size()(3)i<pushed.size原创 2020-08-12 23:29:34 · 194 阅读 · 0 评论 -
力扣 面试题 03.02. 栈的最小值 双栈
https://leetcode-cn.com/problems/min-stack-lcci/思路:搞个双栈,一个栈就做正常的操作,另外一个栈搞成单调非增的即可。有两种实现方式。class MinStack {public: /** initialize your data structure here. */ MinStack() { } void push(int x) { s.push(x); if(MIN.empt原创 2020-08-12 23:12:38 · 178 阅读 · 0 评论 -
力扣 856. 括号的分数 递归/栈/数学
https://leetcode-cn.com/problems/score-of-parentheses/思路一:dfsdfsdfs,考虑当前位置idxidxidx为(((,那么下一位置要么为)))要么为(((,如果是前者,那么当前层的分数加1,如果是后者,就需要进入更深一层计算。class Solution {public: int scoreOfParentheses(string S) { int idx=0; return dfs(S,idx);原创 2020-08-12 22:46:40 · 280 阅读 · 0 评论 -
力扣 341. 扁平化嵌套列表迭代器 递归/栈/python 生成器
https://leetcode-cn.com/problems/flatten-nested-list-iterator/思路一:最简单的思路,采用递归直接预处理出一个数组来存储结果,那么这两个函数就很好写了。但是我感觉这样的设计并不能算是迭代器。/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its原创 2020-08-12 11:38:36 · 222 阅读 · 0 评论 -
力扣 1441. 用栈操作构建数组 栈
https://leetcode-cn.com/problems/build-an-array-with-stack-operations/思路:假设当前需要从listlistlist中读取的数字为vvv,且轮到targettargettarget的第iii个数字了,那么就拿vvv与target[i]target[i]target[i]比较,如果不相等,就令vvv自增,并且做push、poppush、poppush、pop操作,否则做pushpushpush操作即可。class Solution {原创 2020-08-11 20:31:57 · 159 阅读 · 0 评论 -
力扣 682. 棒球比赛 栈 模拟
https://leetcode-cn.com/problems/baseball-game/思路:用栈模拟即可。class Solution {public: int calPoints(vector<string>& ops) { vector<int> vec; int siz=ops.size(); int ans=0; for(int i=0;i<siz;i++){原创 2020-08-11 20:05:45 · 298 阅读 · 1 评论 -
力扣 1047. 删除字符串中的所有相邻重复项 栈
https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/思路:搞个栈随便写。class Solution {public: string removeDuplicates(string S) { int siz=S.size(); //数组模拟栈 vector<char> s; for(int i=0;i<siz;i++原创 2020-08-11 19:53:34 · 292 阅读 · 0 评论 -
力扣 921. 使括号有效的最少添加 栈 思维
https://leetcode-cn.com/problems/minimum-add-to-make-parentheses-valid/思路:初始valvalval为0,遇到左括号自增,遇到右括号自减,当val<0val<0val<0时必须补上其相反数个数的左括号。最后如果val>0val>0val>0,必须补全相应个数的右括号。class Solution {public: int minAddToMakeValid(string S) {原创 2020-08-11 19:32:41 · 150 阅读 · 0 评论 -
力扣 1381. 设计一个支持增量操作的栈 数组模拟栈
https://leetcode-cn.com/problems/design-a-stack-with-increment-operation/思路:栈的大小在一开始就固定了,所以用数组模拟就行了。class CustomStack {public: CustomStack(int maxSize):arr(new int[maxSize]),siz(0),maxSize(maxSize){ } void push(int x) {原创 2020-08-11 19:25:46 · 151 阅读 · 0 评论 -
力扣 173. 二叉搜索树迭代器 中序遍历非递归
https://leetcode-cn.com/problems/binary-search-tree-iterator/思路:对二叉搜索树进行中序遍历就可得到一个从小到大的有序序列。那么最简单的做法就是用一个数组存储中序遍历的结果。但是这个空间复杂度是O(n)O(n)O(n)的,怎么做到O(h)O(h)O(h)呢?使用非递归中序遍历即可。在非递归做法中,栈存储的是从根到某个节点的路径,所以空间复杂度最多为O(h)O(h)O(h)。关于如何用栈实现中序遍历,可以看我这一篇博客。/** * Defin原创 2020-08-11 19:16:35 · 174 阅读 · 0 评论 -
力扣 剑指 Offer 09. 用两个栈实现队列 模拟
https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/思路:两个栈,一个进,一个出,出的没有元素就把进的都放到出的里面。用两个队列模拟栈同理…class CQueue {public: CQueue() { } void appendTail(int value) { s1.push(value); } int deleteHea原创 2020-08-11 13:33:03 · 129 阅读 · 0 评论 -
力扣 1021. 删除最外层的括号 栈 模拟
https://leetcode-cn.com/problems/remove-outermost-parentheses/思路:用一个数即可模拟栈,遇到(((就自增,遇到)))就自减,当这个数为000时,这个位置的括号就要删去。class Solution {public: string removeOuterParentheses(string S) { int val=0; string ans; int siz=S.size();原创 2020-08-11 13:26:35 · 135 阅读 · 0 评论 -
力扣 430. 扁平化多级双向链表 链表+递归/栈
https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list/思路一:递归。其实我们可以把它想象成树形结构,node−>childnode->childnode−>child为树形结构中的左儿子,node−>nextnode->nextnode−>next为树形结构中的右儿子。那么对这棵树进行先序遍历,即可得到结果。当我们使用递归处理一个链表时,可以很容易的得到这个链表的尾节点(非空)原创 2020-08-09 02:11:34 · 142 阅读 · 0 评论 -
力扣 445. 两数相加 II 链表+栈
https://leetcode-cn.com/problems/add-two-numbers-ii/思路:加法自然要从最低位开始搞,那么可以先把给定的链表翻转一下再处理,但是这样做太麻烦了。用栈就可以了,注意进位问题。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NU原创 2020-08-06 15:03:32 · 107 阅读 · 0 评论 -
力扣 155. 最小栈 栈+思维
https://leetcode-cn.com/problems/min-stack/思路:用两个栈,第一个栈s1s_1s1正常做栈的操作,第二个栈s2s_2s2维持一个单调非升的序列,从而保证最小值就在s2s_2s2的栈顶,现在考虑怎么维护第二个栈,如果s2s_2s2为空或者当前要压入的元素<=s2.top()<=s_2.top()<=s2.top(),那么直接将其压到第二个栈内,否则不做任何操作即可。class MinStack {public: /** in原创 2020-05-13 00:05:30 · 265 阅读 · 0 评论 -
力扣 145. 二叉树的后序遍历 非递归版
https://leetcode-cn.com/problems/binary-tree-postorder-traversal/思路:非递归版,这个思路对于前序遍历、中序遍历也适用。左右根,首先获得栈顶,然后判断栈顶是否为空,若不为空,则再次压入该节点,同时压入一个空指针,标记其前一位为根节点,然后压入它右节点、左节点;若栈顶为空,说明前一位也就是当前的栈顶为根节点,那么把它的值放进数组中即可。/** * Definition for a binary tree node. * struct T原创 2020-05-12 21:30:06 · 308 阅读 · 0 评论 -
力扣 94. 二叉树的中序遍历 非递归版 栈
https://leetcode-cn.com/problems/binary-tree-inorder-traversal/思路:非递归版,中序遍历——左根右,也就是把左子树遍历完再输出当前节点的值,然后进入右子树,这是一个递归的过程。所以提示我们需要用到循环找到最左侧的节点,然后输出它的值,进入它的右子树再重复上述过程。/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tree原创 2020-05-12 20:09:01 · 210 阅读 · 0 评论 -
力扣 144. 二叉树的前序遍历 递归/非递归
https://leetcode-cn.com/problems/binary-tree-preorder-traversal/思路一:根左右,递归版随便写。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), rig原创 2020-05-12 19:37:26 · 296 阅读 · 0 评论 -
力扣 32. 最长有效括号 思维\栈
https://leetcode-cn.com/problems/longest-valid-parentheses/思路一:初始置cur=ct=0cur=ct=0cur=ct=0,如果遇到(((,就令cur、ctcur、ctcur、ct自增,否则令curcurcur自减,ctctct自增,那么当cur=0cur=0cur=0时说明当前子串匹配了,我们可以令ans=max(ans,ct)ans...原创 2020-04-25 00:25:26 · 283 阅读 · 0 评论 -
力扣 面试题31. 栈的压入、弹出序列 栈
https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/思路:维护一个栈stackstackstack,假设正在处理pushed[i]、poped[j]pushed[i]、poped[j]pushed[i]、poped[j],那么显然此时有三种情况:(1)pushed[i]=poped[j](1)pushed[i]=...原创 2020-04-23 21:33:53 · 152 阅读 · 0 评论 -
力扣 面试题34. 二叉树中和为某一值的路径 栈+dfs
https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/思路:搞个栈记录路径就行了,注意路径的定义……/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tree...原创 2020-04-23 19:52:52 · 147 阅读 · 0 评论 -
codeforces 1313C2 Skyscrapers (hard version) 单调栈+dp
https://vjudge.net/problem/CodeForces-1313C2思路:不难想到枚举一个最高点iii,然后[1…i][1…i][1…i]非降,[i,n][i,n][i,n]非升即可满足题意。实际上这也是简单版的做法。我们搞两个数组l、rl、rl、r,l[i]l[i]l[i]表示当[1…i][1…i][1…i]非降时所能得到的最高分,r[i]r[i]r[i]表示当[i…n][...原创 2020-04-12 16:16:18 · 130 阅读 · 0 评论 -
力扣 84. 柱状图中最大的矩形 单调栈
https://leetcode-cn.com/problems/largest-rectangle-in-histogram/思路:维护一个单调非降的栈,栈中存放的是该柱子在heightsheightsheights数组中的下标,那么当heights[i]<heights[s.top()]heights[i]<heights[s.top()]heights[i]<heigh...原创 2020-03-15 20:52:58 · 490 阅读 · 0 评论 -
CSUOJ 1901 赏赐 OR 灾难 单调栈
Description大G南征北战终于打下了大片土地成立了G国,大G在开国大典上传召帮助自己南征北战的三大开国元勋小A,小B,小C进殿,并要赏赐三人大量宝物以显示天恩浩荡。大G在征服其他国家的时候抢夺了n箱宝物,他把这些箱子依次排列在三人面前,每个箱子里的宝物都有一个价值wi,大G令他们一人选取一个箱子作为奖励。 可是令大G万万没有想到的是,三人在私底下是存在竞争关系的,由于小B手上兵权强于小C...原创 2019-08-31 15:23:10 · 106 阅读 · 0 评论 -
codeforces gym 10222A Maximum Element In A Stack
http://codeforces.com/gym/102222/problem/AAs an ACM-ICPC newbie, Aishah is learning data structures in computer science. She has already known that a stack, as a data structure, can serve as a collec...原创 2019-08-31 15:06:46 · 364 阅读 · 1 评论 -
HDU 1022 栈+模拟
http://acm.hdu.edu.cn/showproblem.php?pid=1022As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of student want to get back to school by train(because the trains in the ...原创 2019-03-03 17:05:48 · 155 阅读 · 0 评论 -
洛谷 1449 后缀表达式 栈
https://www.luogu.org/problemnew/show/P1449题目描述所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。输入输出...原创 2019-02-17 16:59:17 · 295 阅读 · 0 评论 -
洛谷 P1739 表达式括号匹配 栈
https://www.luogu.org/problemnew/show/P1739题目描述假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。输入输出格式输入格式: 一行:表达式...原创 2019-02-17 16:53:17 · 459 阅读 · 0 评论