LeetCode 热题 HOT 100 (015/100)【宇宙最简单版】

【栈】No. 0155 最小栈【中等】👉力扣对应题目指路

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦

欢迎关注、订阅专栏 【力扣详解】谢谢你的支持!

题目描述

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

  • 实现 MinStack 类:

    • MinStack()
      • 初始化堆栈对象
    • void push(int val)
      • 将元素val推入堆栈
    • void pop()
      • 删除堆栈顶部的元素
    • int top()
      • 获取堆栈顶部的元素
    • int getMin() 【 👉 唯一与普通栈不同的点】
      • 获取堆栈中的最小元素

🔥 思路 :用空间换时间,设计辅助栈来存储栈内每个元素为栈顶元素时对应的栈的最小元素 👉 如下图所示

  • 基于这样的设计, int getMin() 获取堆栈中的最小元素时,仅需要返回辅助栈的栈顶元素即可
  • 注意:对于普通栈,如果要检索到最小元素,复杂度为 O(n),不符合时间复杂度 ⏳ 要求

参考如上思路,给出构建辅助栈 min_stack 的详细步骤如下:

  • 回顾:辅助栈是用来存储栈内每个元素为栈顶元素时对应的 "栈的最小元素" 的
  • 新入栈元素 val 对应的 "栈的最小元素" 应该为 a. 旧栈顶元素对应的 "栈的最小元素" 和 b. 新元素 val 的最小值
    • a. 旧栈顶元素对应的 "栈的最小元素" 对应 self.min_stack[-1],所以需要新入栈 min_stack 的值应为 min(val, self.min_stack[-1])
    • 对应部分在下方代码中用 "## 核心代码行" 标识
python3 复制代码
class MinStack:

    def __init__(self):
        self.stack = [None]
        self.min_stack = [math.inf]  ## 可以发现,辅助栈是向栈顶方向递减的

    def push(self, val: int) -> None:
        self.stack.append(val)
        self.min_stack.append(min(val, self.min_stack[-1]))  ## 核心代码行

    def pop(self) -> None:
        self.stack.pop()
        self.min_stack.pop()

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

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

希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦
🔥 LeetCode 热题 HOT 100

相关推荐
测试199843 分钟前
Web自动化测试:测试用例流程设计
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
mashanshui3 小时前
Https之(二)TLS的DH密钥协商算法
算法·https·tls·dh·ecdhe
山烛5 小时前
矿物分类系统开发笔记(一):数据预处理
人工智能·python·机器学习·矿物分类
wearegogog1236 小时前
MATLAB的脉搏信号分析预处理
算法·matlab
fs哆哆6 小时前
在VB.net中一维数组,与VBA有什么区别
java·开发语言·数据结构·算法·.net
wjt1020206 小时前
机器学习--续
算法·机器学习
牵星术小白7 小时前
【GNSS基带算法】Chapter.2 相干积分与非相干积分
算法
哇哈哈QIQ8 小时前
2025.7.19卡码刷题-回溯算法-组合
算法
gihigo199810 小时前
matlab多目标优化差分进化算法
数据结构·算法
weixin_5824701711 小时前
GS-IR:3D 高斯喷溅用于逆向渲染
人工智能·算法