【leetcode】17. 栈&队列-包含min函数的栈
题目
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
难易程度:easy
示例:
1 | MinStack minStack = new MinStack(); |
提示:
各函数的调用总次数不超过 20000 次
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
分析
由于队列有先进先出
特性,对于队列s
来说每次push
或者pop
一个元素都可能改变栈s
的最小值m
。
push
一个元素x
,如果x < m
, 则将m
先入栈以保留当前栈的最小值,同时m = x
push
新元素x
入队列- 当
pop
一个元素时,首先判断s.top() == m
,如果成立,按照步骤1、2说明下一个元素是专门存的最小元素,需要同时pop
出来 - 否则,直接
pop
就行 top
时正常top
就行
时间复杂度:O(1)
空间复杂度:O(N)
代码
1 | class MinStack { |