LeetCode-155-最小栈
题目
设计一个支持 push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。
示例 1:
1 | 输入: |
提示:
-231 <= val <= 231 - 1
pop
、top
和getMin
操作总是在 非空栈 上调用push
,pop
,top
, andgetMin
最多被调用3 * 104
次
题解
这一题其实大致的思路出来了,同样是Duque
来实现栈;
这里要求常数时间内获得最小值,那我们直接考虑最短的时间O(1)
,怎么做呢?其实很简单,我们用另一个栈,每次保存数据的时候,我们都将目前栈内的最小值保存到那个栈里就好了,然后出栈的时候一起出栈。
具体为:
初始化的时候,minStack
为空,xStack
保存Integer.MAX_VALUE
;然后我们给minStack
入栈的时候,xStack
入栈的数据和xStack
的栈顶数据比一下,入栈那个小的数据;出栈的时候一起出,这样就可以保证栈顶一直都是最小数据,也可以在最短的时间访问到最小数据了。
1 | class MinStack { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Excelius's World!