In [ ]:
class StackMin:
def __init__(self, size):
self.list = [None]*size
self.pos = 0
def push(self, value):
if self.pos == 0:
self.list[0] = Element(0, value)
else:
last = self.list[self.pos-1]
minimum = self.list[last.idx]
if value >= minimum.val:
self.list[self.pos] = Element(last.idx, value)
else:
self.list[self.pos] = Element(self.pos, value)
self.pos += 1
def pop(self):
self.pos -= 1
return self.list[self.pos]
def minimum(self):
last = self.list[self.pos-1]
return self.list[last.idx].value
In [ ]:
class Element:
def __init__(self, idx, val):
self.idx = idx # index of smallest
self.val = val
In [ ]:
s = StackMin(2)
In [ ]:
s.push(3)
In [ ]:
s.push(4)
In [ ]:
s.pop()