- 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
这个题的难点在于怎么记录当前栈中的最小值。
1.思路 设置两个列表,一个是当前储存的列表items,一个当前栈中最小的列表mins。
1.第一次压入栈把最小值记录设置为第一个数,如果不是第一次压入栈,查看之前mins最后一个元素是否大于当前压入的值,如果大于当前的值,就把这个数同时压入两个列表中,如果比当前的值小,items还是压入这个值,但是mins压入之前的值。
2.其他的就很简单了查看一下代码就行了。
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.items=[]
self.mins=[]
self.min=0
def push(self, x: int) -> None:
if len(self.items)==0:
self.items.append(x)
self.mins.append(x)
self.min=x
else:
if self.getMin()>x:
self.items.append(x)
self.mins.append(x)
else:
self.items.append(x)
self.mins.append(self.mins[-1])
def pop(self) -> None:
self.items.pop()
self.mins.pop()
def top(self) -> int:
return self.items[-1]
def getMin(self) -> int:
return self.mins[-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.getMin()