Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
Subscribe to see which companies asked this question
人家更好的方法是维护两个栈
一个栈是正常的,另一个栈维护着当前所有的非上升的元素,也就是这个栈里面,元素都是越来越大的
我的做法比较简单暴力,就是pop的时候,维护一个最小值,用的是系统函数,结果还打败了98%的
class MinStack(object):
def __init__(self):
self.s = []
self.minn = sys.maxint#1 >> 30
"""
initialize your data structure here.
"""
def push(self, x):
self.s += x,
self.minn = min(self.minn,x)
#print self.s,self.minn
#heapq.heappush(self.hp,x)
"""
:type x: int
:rtype: void
"""
def pop(self):
#heapq.heappop(self.s)
self.s.pop()
#print self.s,self.minn
if self.s != []:
self.minn = min(self.s)
else:
self.minn = sys.maxint#1 >> 30
#print len(self.s)
"""
:rtype: void
"""
def top(self):
return self.s[-1]
"""
:rtype: int
"""
def getMin(self):
return self.minn#min(self.s)