zoukankan      html  css  js  c++  java
  • Min Stack

    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]

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

  • 相关阅读:
    pat乙级1018
    下拉框多选,出现这种情况,求大神帮我看看
    Filter 过滤器
    拦截器和过滤器区别
    Servlet 生命周期
    cannot simultaneously fetch multiple bags 问题的解决办法
    JPA规范及其它持久层框架
    数据库设计的三大范式
    装饰者模式
    Java 流
  • 原文地址:https://www.cnblogs.com/openqt/p/4100392.html
Copyright © 2011-2022 走看看