• 155. 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.

    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.

    来自 <https://leetcode.com/problems/min-stack/description/>

    思路1:使用python自带的列表实现,然后min就用官方的min函数

       

     1 class MinStack(object):
     2 
     3     def __init__(self):
     4         """
     5         initialize your data structure here.
     6         """
     7         self.l = []
     8 
     9     def push(self, x):
    10         """
    11         :type x: int
    12         :rtype: void
    13         """
    14         self.l.append(x)
    15 
    16     def pop(self):
    17         """
    18         :rtype: void
    19         """
    20         del(self.l[-1])
    21 
    22     def top(self):
    23         """
    24         :rtype: int
    25         """
    26         return self.l[-1]
    27 
    28     def getMin(self):
    29         """
    30         :rtype: int
    31         """
    32         return min(self.l)

    思路2:发现思路1速度不理想,并且排行榜上两个块比较集中,查看后发现更好的那一种优化了min实现,在添加元素时就做了判断。

    class MinStack(object):
    
        def __init__(self):
            """
            initialize your data structure here.
            """
            self.l = []
            self.min_l = []
    
        def push(self, x):
            """
            :type x: int
            :rtype: void
            """
            self.l.append(x)
            if not len(self.min_l) or x <= self.min_l[-1]:
                self.min_l.append(x)
    
        def pop(self):
            """
            :rtype: void
            """
            if self.l[-1] == self.min_l[-1]:
                del (self.min_l[-1])
            del (self.l[-1])
    
        def top(self):
            """
            :rtype: int
            """
            return self.l[-1]
    
        def getMin(self):
            """
            :rtype: int
            """
            return self.min_l[-1]
  • 相关阅读:
    CSP2020 游记
    React中useLayoutEffect和useEffect的区别
    Vue前后端分离跨域踩坑
    Python 正则将link 和 script 处理为 Django static形式
    BootStrap4
    单例模式
    匈牙利算法——求二部图的最大匹配的匹配数
    抽象工厂模式
    工厂方法模式
    JDK配置步骤
  • 原文地址:https://www.cnblogs.com/Thinker-pcw/p/9482148.html
Copyright © 2020-2023  润新知