Cracking The Code Interview CH3.2


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()