栈
巴巴多斯小魔
这个作者很懒,什么都没留下…
展开
-
leetcode 726. 原子的数量 “K4(ON(SO3)2)2“变为“K4N2O14S4“ (栈模拟)
题目 样例好似有毒,不知道是我孤陋寡闻,还是出题人见多识广,竟然还有Be32,,(H),,真牛逼哇。 导致右括号后一个不一定是数字,还可能是元素了,导致我每次还要las=1,因为比如(H)O2,2不该入栈的。但我们的代码是遇见右括号就要入栈,所以要las=1,将1入栈,相当于没入。 class Solution { typedef pair<string,int> pi; public: string cal(int n){////342得到"342" string r原创 2020-12-15 21:40:37 · 141 阅读 · 0 评论 -
leetcode 224. 基本计算器(逆波兰表达式)
题目 class Solution { #define ll long long public: int getprio(int x){ if(x=='('-'0') return 1;//左括号在这个算法里优先级最低 if(x=='*'-'0'||x=='/'-'0') return 3; if(x=='+'-'0'||x=='-'-'0') return 2; return 0; } int calculate(s原创 2020-12-05 00:24:48 · 196 阅读 · 0 评论 -
leetcode 456. 132模式(单调递减栈还可以找到:对于每个值找到后面小于他的最大值)
题目 时间复杂度nlogn: 我们可以:对于每个i作为132模式中的3,i前面数字的最小值为x,看是否存在[i,n-1]中的数字在[x,nums[i]]之间。如何查看呢,可以先正序一遍求出每个i前面数字的最小值mi[i],然后倒序遍历,后面的放在一个set里,直接lower_bound,upper_bound。 单调栈还可以找到:对于每个值找到后面小于他的最大值)。 所以假如i是132中的1,就需要看一下i后面的每个值x对应后面小于x的最大值y,一堆y里面的最大值second,假如nums[i]<原创 2020-11-18 18:14:12 · 192 阅读 · 0 评论 -
leetcode 面试题 03.05. 栈排序(无语,世界上怎么有这么让人无语的题)
题目 我什么都不想说!这种题太令人无语了,谁让我们需要面试呢。 为什么非要用栈来维护,栈的出现只是用到要适合他的场景,瞎几把出的什么破题。 可能是我太菜,只能n2,我不相信只用一个辅助栈可以做到log,骗谁呢。 就算用了辅助栈能怎样,最高复杂度变成了原来的1/4而已,还是n2级别啊。 搞不懂leetcode某些写理解的,,还觉着很优化一样,每次pop,peak都要合并一下,那不是不如不采用这个很垃圾的1/4优化? 吐槽完了,该写还是得写,谁让我是乖宝宝呢。哭了。 不动脑能想到的最直接的方法是:栈里面是9原创 2020-11-18 16:40:34 · 111 阅读 · 0 评论 -
leetcode 71. 简化路径(栈模拟)
题目 String[] p=spit(path,’/’); 真好!C++ 忘了啥函数了。 class Solution { public String simplifyPath(String path) { String[] p=spit(path,'/'); stack<String>st; for(string s:p){ if(!s.isEmpty()&&s.equals(".")) cont原创 2020-11-13 14:09:13 · 74 阅读 · 0 评论 -
leetcode 155. 最小栈(开启一个辅助栈 每次push min(辅助栈栈顶,x))
class MinStack { public: stack<int>s; stack<int>ss; void push(int x) {s.push(x),ss.push(ss.empty()?x:min(x,ss.top()));} void pop() {s.pop(),ss.pop();} int top() {return s.top();} int getMin() {return ss.top();} }; ..原创 2020-11-12 14:38:58 · 70 阅读 · 0 评论