LeetCode 155. 最小栈
解题思路
题目要求设计一个支持 push ,pop ,top 操作检索到最小元素的栈,并且要求时间复杂度是O(1)。
因为对时间复杂度有要求因此这里不能使用.min()等内置函数,不过可以使用if条件判断,结合一个存放目前最小元素的辅助栈来实现。
在实现过程中具体需要注意以下几点:
- 对于入栈操作,当辅助栈为空时我们需要放入元素
- 为了应对连续的最小元素出栈,除了新来的数小于辅助栈栈顶元素时需要放入辅助栈,当它等于栈顶元素时也要放入
- 这样只要辅助栈栈顶元素等于栈顶元素时就都执行出栈就可以了
代码
```python
class MinStack(object):
def __init__(self):
self.s=[]
self.m=[]
def push(self, x):
self.s.append(x)
if len(self.m)==0 or x <= self.m[-1]:
self.m.append(x)
def pop(self):
if self.s[-1]==self.m[-1]:
self.m.pop()
return self.s.pop()
def top(self):
return self.s[-1]
def getMin(self):
return self.m[-1]
有任何问题欢迎留言,转载请注明出处~