classMinStack:def__init__(self):"""
initialize your data structure here.
"""
self.stack =[]defpush(self, x:int)->None:
self.stack.append(x)defpop(self)->None:
self.stack.pop()deftop(self)->int:return self.stack[-1]defmin(self)->int:returnmin(self.stack)# Your MinStack object will be instantiated and called as such:# obj = MinStack()# obj.push(x)# obj.pop()# param_3 = obj.top()# param_4 = obj.min()
时间复杂度:
O
(
n
)
O(n)
O(n) :个人觉得min函数的时间复杂度是
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
1
)
O(1)
O(1)
3.官方的解决方案
min的时间复杂度为
O
(
1
)
O(1)
O(1)的解决方案
借助辅助栈
classMinStack:def__init__(self):"""
initialize your data structure here.
"""
self.stackA =[]
self.stackB =[]defpush(self, x:int)->None:
self.stackA.append(x)ifnot self.stackB or self.stackB[-1]>= x:# x对应的最小的元素在B栈顶
self.stackB.append(x)# 为了防止pop出现bug,所以等于的情况也appenddefpop(self)->None:if self.stackA.pop()== self.stackB[-1]:
self.stackB.pop()deftop(self)->int:return self.stackA[-1]defmin(self)->int:return self.stackB[-1]# Your MinStack object will be instantiated and called as such:# obj = MinStack()# obj.push(x)# obj.pop()# param_3 = obj.top()# param_4 = obj.min()