Min Stack

作者: 穿越那片海 | 来源:发表于2017-08-20 13:52 被阅读0次

    Easy, Stack

    Question:

    设计一个支持push, pop, top, getMin的堆栈。时间复杂度为O(1)
    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.

    Example:
    MinStack minStack = new MinStack();
    minStack.push(-2);
    minStack.push(0);
    minStack.push(-3);
    minStack.getMin(); --> Returns -3.
    minStack.pop();
    minStack.top(); --> Returns 0.
    minStack.getMin(); --> Returns -2.

    Solution

    构造两个堆栈,一个储存实际数据,一个储存最小数。下面的解放更进一步,利用tuple将两个堆栈融合在一起。

    class MinStack(object):
    
        def __init__(self):
            """
            initialize your data structure here.
            """
            self.stack = []
            
        def push(self, x):
            """
            :type x: int
            :rtype: void
            """
            curMin = self.getMin()
            if curMin == None or x < curMin:
                curMin = x
            self.stack.append((x,curMin))
    
            
        def pop(self):
            """
            :rtype: void
            """
            self.stack.pop()
    
            
    
        def top(self):
            """
            :rtype: int
            """
            if self.stack:
                return self.stack[-1][0]
    
            
    
        def getMin(self):
            """
            :rtype: int
            """
            if self.stack:
                return self.stack[-1][1]
    

    相关文章

      网友评论

          本文标题:Min Stack

          本文链接:https://www.haomeiwen.com/subject/jqsfdxtx.html