码迷,mamicode.com
首页 > 其他好文 > 详细

Min Stack

时间:2014-11-15 23:12:56      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   ar   sp   strong   div   on   

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.

 

分析:

要求实现一个栈,支持O(1)时间的取最小元素操作。

我用了很简单的办法来做,导致pop()的时间复杂度为O(n),应该有更好的方式,但是我没有想到时间少于O(logN)的解决方案,先提交代码也Accepted了。

class MinStack:
    # @param x, an integer
    # @return an integer

    def __init__(self):
        self.stack = []
        self.min = None

    def push(self, x):
        if not self.min or x < self.min: self.min = x
        self.stack.append(x)

    # @return nothing
    def pop(self):
        i = self.stack.pop()
        if len(self.stack) == 0:
            self.min = None
        elif i == self.min:
            self.min = min(self.stack)

    # @return an integer
    def top(self):
        return self.stack[-1]

    # @return an integer
    def getMin(self):
        return self.min

小结:

leetcode上有关于这个问题的解答,需要考虑一下才能明白,下面代码所有操作的时间复杂度都是O(1):

class MinStack:
    # @param x, an integer
    # @return an integer

    def __init__(self):
        self.stack = []
        self.min = []

    def push(self, x):
        self.stack.append(x)
        if len(self.min) == 0 or x <= self.min[-1]:
            self.min.append(x)

    # @return nothing
    def pop(self):
        if len(self.stack) > 0:
            if self.stack.pop() == self.min[-1]:
                self.min.pop()

    # @return an integer
    def top(self):
        return self.stack[-1]

    # @return an integer
    def getMin(self):
        return self.min[-1]

在算法的思考方面我还需要磨练,多做题是个不错的锻炼方式,有进步就好。但是最近工作很忙,要学习的框架和技术很多,实在没有多余的精力来阅读和写作。鱼与熊掌不可兼得。

Min Stack

标签:des   style   blog   color   ar   sp   strong   div   on   

原文地址:http://www.cnblogs.com/openqt/p/4100392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!