news 2026/4/16 23:10:24

LeetCode 155. Min Stack 题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 155. Min Stack 题解

LeetCode 155. Min Stack 题解

题目描述

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

实现MinStack类:

  • MinStack()初始化堆栈对象。
  • void push(int val)将元素 val 推入堆栈。
  • void pop()删除堆栈顶部的元素。
  • int top()获取堆栈顶部的元素。
  • int getMin()获取堆栈中的最小元素。

示例 1:

输入: ["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]] 输出: [null,null,null,null,-3,null,0,-2] 解释: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2.

解题思路

方法:辅助栈

思路

  • 使用两个栈,一个主栈用于存储所有元素,一个辅助栈用于存储当前的最小元素
  • 当推入元素时,将元素压入主栈,并将当前最小元素压入辅助栈
  • 当弹出元素时,同时弹出主栈和辅助栈的栈顶元素
  • 当获取顶部元素时,返回主栈的栈顶元素
  • 当获取最小元素时,返回辅助栈的栈顶元素

复杂度分析

  • 时间复杂度:O(1),所有操作都是常数时间。
  • 空间复杂度:O(n),需要使用两个栈来存储元素。

代码实现

方法:辅助栈

class MinStack: def __init__(self): # 初始化主栈和辅助栈 self.stack = [] self.min_stack = [] def push(self, val: int) -> None: # 将元素压入主栈 self.stack.append(val) # 将当前最小元素压入辅助栈 # 如果辅助栈为空,或者当前元素小于等于辅助栈的栈顶元素,则压入 if not self.min_stack or val <= self.min_stack[-1]: self.min_stack.append(val) # 否则,再次压入辅助栈的栈顶元素 else: self.min_stack.append(self.min_stack[-1]) def pop(self) -> None: # 同时弹出主栈和辅助栈的栈顶元素 if self.stack: self.stack.pop() self.min_stack.pop() def top(self) -> int: # 返回主栈的栈顶元素 if self.stack: return self.stack[-1] return None def getMin(self) -> int: # 返回辅助栈的栈顶元素 if self.min_stack: return self.min_stack[-1] return None

测试用例

测试用例 1:

输入:

["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]]

输出:

[null,null,null,null,-3,null,0,-2]

总结

本题是栈的经典应用问题,主要考察对栈数据结构的理解和使用。通过使用辅助栈,我们可以在常数时间内检索到最小元素。

辅助栈的核心思想是:使用两个栈,一个主栈用于存储所有元素,一个辅助栈用于存储当前的最小元素,当推入元素时,将当前最小元素压入辅助栈,当弹出元素时,同时弹出主栈和辅助栈的栈顶元素。

这种方法不仅适用于最小栈问题,还可以应用于许多其他需要在常数时间内检索到特定元素的问题。掌握辅助栈的使用,对于解决这类问题非常重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 23:10:22

2026年AI投资热点:泡沫与机会

在技术浪潮与市场狂热之间2026年&#xff0c;人工智能领域正处在一个前所未有的历史交汇点。一方面&#xff0c;生成式AI的渗透率已超过53%&#xff0c;企业采用率高达88%&#xff0c;技术正以前所未有的速度重塑各行各业&#xff0c;尤其是软件测试行业——预测显示&#xff0…

作者头像 李华
网站建设 2026/4/16 23:03:35

掌握大模型技能!运维工程师薪资飙升53%,从“救火队员”变身“AI架构师”的跃迁秘籍!

本文揭示了运维与大模型融合的趋势&#xff0c;指出掌握大模型技能的运维工程师薪资较传统岗位高出53%。文章分析了传统运维的困境&#xff0c;如人力成本激增、故障响应滞后等&#xff0c;以及大模型如何通过人机协同、主动防御等手段重构运维。同时&#xff0c;文章探讨了运维…

作者头像 李华
网站建设 2026/4/16 23:03:34

yolo11模型部署记录

1.下载yolo11模型 ultralytics-8.3.39 2.创建Conda新环境&#xff08;先安装Anaconda&#xff09; conda create --name yolov11 python3.11.9 3.激活环境 conda activate yolov11 查看所有已存在的环境 conda env list 删除环境 conda env remove -n <环境名> …

作者头像 李华
网站建设 2026/4/16 22:54:18

MIPI CSI-2 vs DSI:移动设备视频接口的终极对比

MIPI CSI-2与DSI&#xff1a;移动设备视频接口的深度解析与选型指南 在移动设备的设计与开发中&#xff0c;视频数据的传输效率和质量直接影响着用户体验。作为移动行业处理器接口(MIPI)联盟制定的两大核心标准&#xff0c;CSI-2和DSI分别针对摄像头输入和显示输出场景进行了优…

作者头像 李华
网站建设 2026/4/16 22:54:15

**三维重建新视角:基于Python与Open3D的实时点云拼接实战解析**在计算机视觉和机器人领域,**三维

三维重建新视角&#xff1a;基于Python与Open3D的实时点云拼接实战解析 在计算机视觉和机器人领域&#xff0c;三维重建技术正逐渐成为构建数字世界的核心能力之一。本文将聚焦于一个高频应用场景——多视角点云数据的实时拼接与可视化&#xff0c;并以 Python Open3D 为核心工…

作者头像 李华
网站建设 2026/4/16 22:54:13

C语言入门基础2

本章内容&#xff1a;1.C语言数据类型及变量1&#xff09;数据类型简单介绍在C语言中&#xff0c;它提供了丰富的数据类型来描述生活中的各种数据&#xff0c;比如我们去超市买东西&#xff0c;买完东西之后&#xff0c;收银员会给我们一个小票&#xff0c;小票上的信息大概如下…

作者头像 李华