编程语言
首页 > 编程语言> > 力扣刷题Python笔记:最小栈

力扣刷题Python笔记:最小栈

作者:互联网

题目

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

提示:

来源:力扣(LeetCode)

Python解法

这道题用的是“备用”栈解法,即除了原来存放数组的栈(主栈)以外,我们还定义了一个最小栈用来存放当前数组的最小值。

具体的解题思路如下:
①当第一个元素放入主栈时,将其也放入最小栈,表示当前主栈最小值就是该元素;
②以后再将元素放入主栈时,将其与最小栈最后一个值进行比较,如果该元素不大于最小栈最后一个元素,将该元素也顺便压入最小栈;
③删除栈顶元素时,如果该元素与最小栈最后一个元素相同,删除最小栈最后一个元素,确保同时更新当前主栈最小值;
④获取栈顶元素——即获取主栈最后一个元素,检索栈中的最小元素——即获取最小栈最后一个元素。

代码如下:

class MinStack:
    def __init__(self):
        self.main_stack = []
        self.min_stack = []

    def push(self, x: int) -> None:
        self.main_stack.append(x)
        if (not self.min_stack) or (x <= self.min_stack[-1]):
            self.min_stack.append(x)

    def pop(self) -> None:
        x = self.main_stack.pop()
        if x == self.min_stack[-1]:
            self.min_stack.pop()

    def top(self) -> int:
        return self.main_stack[-1]

    def getMin(self) -> int:
        return self.min_stack[-1]

标签:min,Python,self,元素,最小,力扣,主栈,stack,刷题
来源: https://blog.csdn.net/weixin_45517168/article/details/110259620