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

Leetcode_155. 最小栈

✨✨ 欢迎大家来到小伞的大讲堂✨✨

🎈🎈养成好习惯,先赞后看哦~🎈🎈

所属专栏:C++_OJ
小伞的主页:xiaosan_blog

最小栈

155. 最小栈 - 力扣(LeetCode)

设计一个支持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.

提示:

  • -231 <= val <= 231 - 1
  • poptopgetMin操作总是在非空栈上调用
  • push,pop,top, andgetMin最多被调用3 * 104

解题思路:

由于取栈内最小值时,不能改变原有的栈,所以采用两个栈,一个为正常栈(stack<int> x_stack;),另一个为最小栈( stack<int> min_stack;)

去栈顶元素/取最小值

int top() { return x_stack.top(); }

int getMin() { return min_stack.top(); }

正常栈/最小栈的插入

void push(int val) {

x_stack.push(val); // 正常插入

min_stack.push(min(min_stack.top(), val));//每次插入最小值在最小栈里面

}

初始化堆栈对象

MinStack() { min_stack.push(INT_MAX); } // 插入一个最大值

由于每次插入最小值进入栈中,需要进行比较,所以需初始化一个最大值,那么每次插入都为最小值。

正常栈/最小栈的删除

void pop() {

x_stack.pop();

min_stack.pop();

}

//这是就有人提问:正常栈删除为最后进栈的元素,最小栈是否也满足这样

是的,但最小栈的删除的元素却不同,我们每次插入的值不是最小栈栈顶元素的值,就是最小值进栈,那么每次删除不是原最小栈栈顶的元素,就是新进栈的最小元素

插入(-2,-3,0,5,3,6,8,7) ,调试一下

正常栈插入

最小栈插入

由于后面的值都大于-3的值,所以最小栈的插入都为-3,仔细观察,我们发现一个规律,除去最小栈初始化的 INT_MAX,他们的个数是匹配的,如果我们一直pop,-3最后是同时被删除在栈中的

完整代码

class MinStack { stack<int> x_stack; stack<int> min_stack; public: MinStack() {min_stack.push(INT_MAX); } // 插入一个最大值 void push(int val) { x_stack.push(val); // 正常插入 min_stack.push(min(min_stack.top(), val)); // 插入最小值在小栈里面 } void pop() { x_stack.pop(); min_stack.pop(); } int top() { return x_stack.top(); } int getMin() { return min_stack.top(); } };
http://www.jsqmd.com/news/478582/

相关文章:

  • 软考中级--数据库系统工程师 备考建议和考试注意事项
  • 电脑CPU速度很快,为什么3dMax还会出现卡顿的情况?
  • 牛客_JZ31 栈的压入、弹出序列
  • Slurm高级特性详解:QoS、资源限制与作业优先级配置指南
  • Gorilla网络安全应用:威胁检测API集成与响应自动化完整指南
  • Leetcode_43. 字符串相乘
  • 【C++BFS】690. 员工的重要性
  • 【AutoSAR】只讲干货!使用EB Tresos配置Port
  • 终极指南:Upspin核心架构完全解析——三大服务如何构建全球命名系统
  • 【亲测免费】推荐项目:Dubbo Spring Boot Starter - 简化你的微服务开发
  • 从XML到JSON:Proteus如何革命性重构Android动态布局开发
  • 【亲测免费】 推荐使用:KCloud-Platform-IoT - 超强微服务架构的物联网云平台
  • SpringBoot集成RestTemplate请求高德地图API
  • PyCaret批量预测:处理大规模推理任务的终极指南
  • 排序——快速排序
  • MessagePack-CSharp未来发展方向:终极路线图与功能规划指南
  • 10个终极API安全测试技巧:awesome-web-hacking实战指南
  • 如何使用IPED进行文件类型统计趋势分析:掌握数字证据随时间变化的关键技巧
  • Python枚举类型完全指南:从入门到精通的10个实用技巧
  • 掌握mmdetection模型剪枝技术:通道剪枝与结构剪枝完整指南
  • vue3横向滚动日期选择器组件(Element Plus)
  • 空间函数在 ABAP SQL 里到底是什么
  • 【JEECG】JVxeTable表格行样式错位、底部滚动条错位
  • React组件更新终极指南:从setState到Fiber树的完整解析
  • 搞懂 spatial reference system:为什么 SRID 才是 SAP 空间开发里最容易被低估的基础设施
  • pt转onnx转ncnn模型(yolov8部署安卓)
  • .vscode配置文件备份
  • 搞懂 ABAP 里的 Heap 引用与 Stack 引用:从内存语义到失效边界
  • 解决protobuf版本冲突:从ImportError到streamlit顺利运行的实战指南
  • 【工具-VMware Workstation-ubuntu】