python-leetcode 69.最小栈

题目:

设计一个支持push,pop,top,操作,并能在常数时间内检索到最小元素的栈。


辅助栈法:

1:使用两个栈,一个主栈用于存储所有元素,另一个辅助栈用于存储当前元素的最小值

2: 每次push时,将元素压入主栈,同时比较当前元素与辅助栈顶元素,将较小者压入辅助栈

3:每次pop时,同时从主栈和辅助栈弹出元素

4:getmin,直接返回辅助栈最小的栈顶元素

python 复制代码
class MinStack(object):

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

    def push(self, val):
        """
        :type val: int
        :rtype: None
        """
        self.stack.append(val)
        if not self.min_stack or val <=self.min_stack[-1]:
            self.min_stack.append(val)

    def pop(self):
        """
        :rtype: None
        """
        if self.stack:
            top_val=self.stack.pop()
            if top_val==self.min_stack[-1]:
                self.min_stack.pop()
        

    def top(self):
        """
        :rtype: int
        """
        if self.stack:
            return self.stack[-1]

    def getMin(self):
        """
        :rtype: int
        """
        if self.min_stack:
            return self.min_stack[-1]


# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
相关推荐
YuTaoShao12 小时前
【LeetCode 每日一题】865. 具有所有最深节点的最小子树——(解法一)自顶向下
算法·leetcode·职场和发展
爱吃生蚝的于勒12 小时前
【Linux】进程间通信之匿名管道
linux·运维·服务器·c语言·数据结构·c++·vim
寻星探路12 小时前
【算法专题】哈希表:从“两数之和”到“最长连续序列”的深度解析
java·数据结构·人工智能·python·算法·ai·散列表
!停12 小时前
C语言单链表
c语言·数据结构·算法
独自破碎E12 小时前
【队列】求二叉树的层序遍历
leetcode
闻缺陷则喜何志丹12 小时前
【回文 字符串】3677 统计二进制回文数字的数目|2223
c++·算法·字符串·力扣·回文
Tisfy12 小时前
LeetCode 0085.最大矩形:单调栈
算法·leetcode·题解·单调栈
mit6.82412 小时前
出入度|bfs|状压dp
算法
!停12 小时前
C语言栈和队列的实现
开发语言·数据结构
hweiyu0012 小时前
强连通分量算法:Kosaraju算法
算法·深度优先