Estrutura de dados que se comporta como uma pilha em termos de push e pop, mas também retorna mínimo em tempo constante)
class MinStack():
def __init__(self):
self.stack = []
self.currentMin = None
def push(self, elem):
if not self.stack or elem <= self.currentMin:
self.stack.append(self.currentMin)
self.currentMin = elem
self.stack.append(elem)
def pop(self):
if not self.stack:
return None # or throw
elem = self.stack.pop()
if elem == self.currentMin:
self.currentMin = self.stack.pop()
return elem
a = MinStack()
a.push(1)
a.push(2)
a.push(3)
a.push(-2)
print a.currentMin
a.pop()
print a.currentMin
a.pop()
print a.currentMin
a.pop()
print a.currentMin
a.pop()
print a.currentMin
a.pop()
print a.currentMin
a.pop()