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

相关推荐
泡海椒3 分钟前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb12 分钟前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
辰烨chenye12 分钟前
LeetCode Hot 100 题解 · 二分篇
java·算法·leetcode
微功夫信息技术20 分钟前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
sanjiaomao3331 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
乐迪信息1 小时前
如何通过AI防爆摄像机精准判断船舶超速?
大数据·人工智能·算法·安全·目标跟踪
大圣编蚕2 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
linweidong3 小时前
中科闻歌Java面试题及参考答案
java·python·大模型·提示词·ai agent·mcp·rag原理
小玮看世界3 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法
萧鼎3 小时前
2026实战:用 tomlkit 优雅读写 TOML 配置,告别手写解析器
python·开源·教程·python库