当前位置: 首页 > news >正文

LeetCode - 155. 最小栈

题目

155. 最小栈 - 力扣(LeetCode)

思路

针对这道最小栈的题目,我的思路是使用两个栈来实现 - 一个正常的数据栈和一个辅助的最小值栈。

首先,我分析了题目要求:需要在O(1)时间内实现push、pop、top操作,并且能够获取栈中的最小元素。常规栈可以满足前三个操作,但获取最小元素通常需要O(n)时间。

我的解决思路是:

  • 用一个数据栈存储所有元素,实现基本的栈操作
  • 用一个最小栈来跟踪当前栈中的最小值

具体实现过程:

  1. 当push一个新元素时,将其加入数据栈;同时,如果这个元素小于或等于当前最小栈的栈顶(或最小栈为空),则也将其压入最小栈
  2. 当pop一个元素时,检查它是否等于最小栈的栈顶,如果是,则最小栈也需要pop
  3. top操作直接返回数据栈的栈顶
  4. getMin操作直接返回最小栈的栈顶

这个方法的关键在于最小栈的维护 - 我们不是每次都把元素放入最小栈,而是只在元素是新的最小值时才放入。这确保了最小栈的栈顶始终是当前数据栈中的最小值,同时所有操作的时间复杂度都保持在O(1)。

空间复杂度是O(n),最坏情况下,如果所有元素是递减的,最小栈会存储所有元素。但在实际应用中,通常不会这么糟糕。

正确写法

class MinStack {stack<int> dataSt;stack<int> minSt;
public:/** initialize your data structure here. */MinStack() {}void push(int x) {dataSt.push(x);if(minSt.empty() ||  x <= minSt.top()){minSt.push(x);}}void pop() {if(dataSt.top() == minSt.top()){minSt.pop();}dataSt.pop();}int top() {return dataSt.top();}int getMin() {return minSt.top(); }
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(x);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/

http://www.dtcms.com/a/353319.html

相关文章:

  • Python Imaging Library (PIL) 全面指南:PIL基础入门-跨平台安装与环境配置
  • Redis 数据结构
  • Linex系统网络管理(二)
  • 【yocto】Yocto Project 核心:深入了解.inc文件
  • Java中使用Spring Boot+Ollama构建本地对话机器人
  • Maven 依赖传递与排除基础逻辑
  • Astah UML 中,状态机(State Machine)的建模最合适使用「UML 状态图(State Diagram)」
  • 轻量级自动驾驶多视图视觉问答模型-EM-VLM4AD
  • 鸿蒙HarmonyOS状态管理装饰器详解
  • perccli 工具
  • 鸿蒙网络编程系列62-仓颉版使用Request部件上传多个文件到服务端
  • 华中科大联手小米推出ReCogDrive:自动驾驶迎来“认知革命”!
  • 零基础-力扣100题从易到难详解(持续更新)
  • 化学分析原理与算法、数据库。
  • 20250826的学习笔记
  • TDengine IPv6 支持用户手册
  • 盛大启幕!融智兴科技亮相 IOTE 2025 深圳国际物联网展
  • Mysql——调优
  • 从PostgreSQL到人大金仓(KingBase)数据库迁移实战:Spring Boot项目完整迁移指南
  • Python常见设计模式2: 结构型模式
  • jenkins集成liquibase
  • web中的过滤器和拦截器
  • LaTeX论文转word插入mathtype公式
  • KRaft vs ZooKeeper为何迁移、差异全览与落地实践
  • open3D学习笔记
  • 微软研究院最新tts模型VIBEVOICE解析
  • 配送算法16 A Deep Reinforcement Learning Approach for the Meal Delivery Problem
  • postgreSql远程连接数据库总是超时断开?
  • c#联合vision master 的基础教程
  • linux安装containerd