设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/min-stack
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这道题让我明显的感觉到了封装的理念,题中说是实现一个栈并且可以获取栈中的最小元素。
可以有这样一种思路就是用两个栈来实现一个栈,用类将两个栈封装起来变成一个可以随时获取他的最小元素的栈。第一个栈保持栈的基本作用,而另一个栈用来压入第一个栈压入的小的数值,从而达到题目要求栈的实现
:
需要注意的一点是;当一号栈入的数值等于当前栈的最小值是也要将这个数值压入二号栈,否则一号栈出栈时二号栈跟着出栈,但是一号栈还有一个相同的最小值,但是此时因为二号栈已经将唯一的一个最小值出栈了当需要获取最小值时,就会出错。
好了下一题:
链接:https://www.nowcoder.com/questionTerminal/885c1db3e39040cbae5cdf59fb0e9382
来源:牛客网
数据范围:表达式长度满足 1≤n≤104 1 \le n \le 10^4 \ 1≤n≤104 ,表达式中仅包含数字和 + ,- , * , / ,其中数字的大小满足 ∣val∣≤200 |val| \le 200 \ ∣val∣≤200 。 逆波兰表达式时后缀表达式,所以可以用栈来计算它的值,先不断将数字压入栈里,当判断遇到运算符时定义一个左变量一个右变量来接受出栈的两个值之后将运算的结果重新压入栈,于是最后的结果就是表达式的值了。
那么如何来将中缀表达式转换为后缀表达式呢?
得先考虑优先级的问题,优先级高的运算符应该放在前面而低的放在后面,比如现有一列字符串表示中缀现在我们要将其转化为后缀,先将其中所有字符入栈,若是数字立马出栈,若是运算符则压着,一旦遇到比栈顶优先级高的运算符则立马出栈,若是优先级低的或者相同的则先出栈在入栈,直到没有字符入栈在全部出栈,这样我们就得到了一个后缀表达式
标签:11,元素,出栈,val,练习,运算符,堆栈,leetcode,表达式 From: https://www.cnblogs.com/qjwxlj/p/17308221.html