Leetcode: Min Stack

Question

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.

Solution

Analysis

refer to here.
Great Idea !

class MinStack(object):
    def __init__(self):
        """ initialize your data structure here. """
        self.stack, self.minstack = [], []



    def push(self, x):
        """ :type x: int :rtype: nothing """
        self.stack.append(x)
        if self.minstack==[] or self.minstack[-1]>=x:
            self.minstack.append(x)

    def pop(self):
        """ :rtype: nothing """
        if self.stack!=[]:
            elem = self.stack[-1]
            self.stack = self.stack[0:-1]
            if self.minstack!=[] and elem==self.minstack[-1]:
                self.minstack = self.minstack[0:-1]

    def top(self):
        """ :rtype: int """
        if self.stack!=[]:
            return self.stack[-1]
        else:
            return None


    def getMin(self):
        """ :rtype: int """
        if self.minstack!=[]:
            return self.minstack[-1]
        else:
            return None

你可能感兴趣的:(Leetcode: Min Stack)