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

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.xdnf.cn/news/19041.html

相关文章:

  • 8.28 模拟
  • rust语言(1.88.0)sqlite数据库rusqlite库(0.37.0)学习笔记
  • 蘑兔音乐:帮你把灵感落地
  • 【新版发布】Apache DolphinScheduler 3.3.1 正式上线:更稳、更快、更安全!
  • 【Django + Pure Admin】基于Django+Vue3的前后端分离管理系统框架设计
  • 预处理详解
  • 【Spring Cloud 微服务】5.架构的智慧枢纽:深度剖析 Nacos 注册中心
  • 《Vuejs设计与实现》第 17 章(编译优化)
  • JMeter 5.3 性能测试:文件下载脚本编写与导出文件接收完整指南
  • 数据结构:堆排序 (Heap Sort)
  • spire.doc在word中生成公式
  • 设计模式理解
  • Shader开发(十七)着色器中的纹理采样与渲染
  • 农业物联网:科技赋能现代农业新篇章
  • 数模笔记day01(数据预处理、K-means聚类、遗传算法、概率密度分布)
  • UE5蓝图接口的创建和使用方法
  • 有鹿机器人如何用科技与创新模式破解行业难题
  • linux下的网络编程(2)
  • 智能体协作体系核心逻辑:Prompt、Agent、Function Calling 与 MCP 解析
  • AV1到达开始和约束时间
  • 分治法——二分答案
  • XFile v2 系统架构文档
  • Ansible 核心模块与实操练习
  • 第十三章项目资源管理--13.3 规划资源管理
  • Apifox 8 月更新|新增测试用例、支持自定义请求示例代码、提升导入/导出 OpenAPI/Swagger 数据的兼容性
  • 手写MyBatis第37弹: 深入MyBatis MapperProxy:揭秘SQL命令类型与动态方法调用的完美适配
  • AI赋能前端性能优化:核心技术与实战策略
  • Swift 解法详解 LeetCode 364:嵌套列表加权和 II
  • 713 乘积小于k的子数组
  • git学习 分支管理(branching)合并分支