Problem statement

https://leetcode.com/problems/min-stack/

Solution

Here we need to maintain two stacks: one is original one and another is min_stack, where we keep elements in descending order.

Complexity

It is O(1) for all operations for time and O(n) for space after n queries.

Code

class MinStack:
    def __init__(self):
        self.stack_main = []
        self.stack_min = []
        
    def push(self, x):
        self.stack_main.append(x)
        if not self.stack_min or self.stack_min[-1] >= x:
          self.stack_min.append(x)

    def pop(self):
        last = self.stack_main[-1]
        del self.stack_main[-1]
        if last == self.stack_min[-1]:
          del self.stack_min[-1]

    def top(self):
        return self.stack_main[-1]

    def getMin(self):
        return self.stack_min[-1]