zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    博客园
    未释放的已删除文件
    ssh连接缓慢
    剑指 Offer 38. 字符串的排列
    剑指 Offer 37. 序列化二叉树
    剑指 Offer 50. 第一个只出现一次的字符
    剑指 Offer 36. 二叉搜索树与双向链表
    剑指 Offer 35. 复杂链表的复制
    剑指 Offer 34. 二叉树中和为某一值的路径
    剑指 Offer 33. 二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/Thinker-pcw/p/9482148.html
Copyright © 2011-2022 走看看