LeetCode:155.最小栈

在这里插入图片描述

class MinStack(object):

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.stack = []
        

    def push(self, x):
        """
        :type x: int
        :rtype: void
        """
        if not self.stack:
            self.stack.append((x, x))
        else:
            self.stack.append((x, min(x, self.stack[-1][1])))
        

    def pop(self):
        """
        :rtype: void
        """
        self.stack.pop()
        

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

解释

  • __init__: 初始化一个空栈,这里使用列表self.stack来存储栈元素。但不同于常规栈,这里的栈元素是一个元组(x, min_val),其中x是压入栈的原始值,min_val是到目前为止栈中的最小值。
  • push: 当压入一个新元素x时,它首先检查栈是否为空。如果栈为空,则直接压入(x, x)(因为此时x就是最小值)。如果栈不为空,则压入(x, min(x, self.stack[-1][1])),其中self.stack[-1][1]是栈顶元素对应的当前最小值。
  • pop: 弹出栈顶元素,即self.stack.pop()
  • top: 返回栈顶元素的原始值,即self.stack[-1][0]

举例

假设我们按照以下顺序对MinStack进行操作:

  1. 初始化一个MinStack对象。
  2. 使用push方法压入元素3。
  3. 使用push方法压入元素2。
  4. 使用push方法压入元素5。
  5. 调用top方法查看栈顶元素(应返回5)。
  6. 调用getMin方法(注意:虽然原代码中没有getMin方法,但根据类的设计,我们可以假设这个方法返回栈中的最小值,即返回self.stack[-1][1])。
  7. 使用pop方法弹出栈顶元素。
  8. 再次调用top方法查看栈顶元素(应返回2)。

下面是相应的Python代码示例(包括假设的getMin方法):

class MinStack(object):
    # ...(省略了已给出的__init__、push、pop和top方法)

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

# 使用示例
stack = MinStack()
stack.push(3)
stack.push(2)
stack.push(5)
print(stack.top())  # 输出: 5
print(stack.getMin())  # 输出: 2
stack.pop()
print(stack.top())  # 输出: 2

相关推荐

  1. LeetCode 155

    2024-05-26 01:38:47       29 阅读
  2. Leetcode 155. 【中等】

    2024-05-26 01:38:47       12 阅读
  3. LeetCode_Hot100__155_Python

    2024-05-26 01:38:47       21 阅读
  4. LeetCode热题100】155.

    2024-05-26 01:38:47       16 阅读
  5. 155.

    2024-05-26 01:38:47       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-26 01:38:47       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-26 01:38:47       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-26 01:38:47       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-26 01:38:47       20 阅读

热门阅读

  1. 001 mongodb

    2024-05-26 01:38:47       12 阅读
  2. QT--splitter的使用

    2024-05-26 01:38:47       11 阅读
  3. 39. 组合总和 - 力扣(LeetCode)

    2024-05-26 01:38:47       11 阅读
  4. 169. 多数元素

    2024-05-26 01:38:47       9 阅读
  5. 15、Go Gin常见响应返回详解

    2024-05-26 01:38:47       11 阅读
  6. 掌握C++回调:按值捕获、按引用捕获与弱引用

    2024-05-26 01:38:47       12 阅读
  7. 【数据结构与算法 | 基础篇】数组模拟栈

    2024-05-26 01:38:47       12 阅读
  8. 银发经济:老龄化社会中的机遇与挑战

    2024-05-26 01:38:47       10 阅读
  9. 基于Amazon Cognito的安全登录与资源访问

    2024-05-26 01:38:47       11 阅读