• 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]

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

  • 相关阅读:
    常用数据类型占用内存大小
    A2W,W2A等的使用
    Java 注释规范
    windows WTL使用命令行参数
    C++ for循环与迭代器
    C++11 正则表达式简单运用
    LINUX部署SVN服务器
    LINUX搭建PySpider爬虫服务
    Linux常用操作指令
    Centos搭建Seafile个人网盘
  • 原文地址:https://www.cnblogs.com/openqt/p/4100392.html
Copyright © 2020-2023  润新知