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

手把手带你了解C++最小栈

push(x)—— 将元素 x 推入栈中。

pop()—— 删除栈顶的元素。

top()—— 获取栈顶元素。

getMin()—— 检索栈中的最小元素。

示例:

输入:

[“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.

思路

C++支持的栈(原生栈),可以实现 push、pop、top(peek), 但是要获取最小元素, 一种方法是通过暴力搜索,从头到尾遍历整个,那么时间复杂度是 O(n),不是在常数级获取最小值, 不符合题目的要求。

我们可以设置两个栈,一个数据栈 datastack,用于存放需要存放的数据,一个记录最小值的栈 sortedstack。

每次 push 操作之后, 保存当前 push 元素之后数据栈中的最小值, 因为从第一次 push 到之后的每次 push 操作,我们知道每次 push 的值,也很容易知道当前的栈中的最小值。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

```cpp

classMinStack {

public:

/** initialize your data structure here. */

//创建两个栈

stack<int> datastack;//数据栈

stack<int> sortedstack;//有序栈,栈底最大,栈顶最小,有<=栈顶的元素才push

MinStack() {

}

voidpush(intval) {

datastack.push(val);//将值push到数据栈

//有序栈

//当有序栈为空 或 值小于等于有序栈的栈顶 就push

if(sortedstack.empty()||val<=sortedstack.top())//sortedstack==sortedstack.empty() 错误

sortedstack.push(val);

}

voidpop() {

if(datastack.top()==sortedstack.top())//数据栈的栈顶 和 有序栈的栈顶 相同, 有序栈出栈

sortedstack.pop();

datastack.pop();//数据栈一直在出栈

}

inttop() {

returndatastack.top();

}

intgetMin() {

returnsortedstack.top();

}

};

/**

* Your MinStack object will be instantiated and called as such:

* MinStack* obj = new MinStack();

* obj->push(val);

* obj->pop();

* int param_3 = obj->top();

* int param_4 = obj->getMin();

*/

总结

本篇文章就到这里了,希望能给你带来帮助

http://www.jsqmd.com/news/722978/

相关文章:

  • 2026年3月靠谱的汽车增压器组件口碑推荐,欧曼增压器/船机增压器/7830增压器/工程机械增压器,汽车增压器供应商推荐 - 品牌推荐师
  • MIMO稀疏信道估计:MOMPnet算法与硬件损伤校准
  • 95%小白选手持喷码机的误区
  • 华硕笔记本性能调校终极指南:G-Helper完全替代Armoury Crate
  • 国网低压侧, 智能融合终端, 微应用基础库
  • 2025_NIPS_Table2LaTeX-RL: High-Fidelity LaTeX Code Generation from Table Images via Reinforced Mu...
  • 出轨小三就会净身出户?告诉你出轨离婚财产分割的5个真相
  • ARM架构异常处理与RAS特性深度解析
  • PHP开发的OA办公系统源码|集成CRM客户管理+ERP订单合同管理(PC端与移动端双平台)
  • 2026年惠州保安公司行业解析,惠州工厂保安公司服务优势与选择要点,帮你判断惠州哪家保安公司好 - 栗子测评
  • Proxmox VE (PVE):虚拟化神器,从0开始踩坑
  • 出海办公效率瓶颈凸显,跨应用AI办公助手如何打通跨境业务孤岛?
  • 如何快速实现老Mac升级:OpenCore Legacy Patcher终极指南
  • 抖音无水印视频下载终极指南:3分钟掌握免费高清资源获取秘籍
  • ARM虚拟化核心:HFGRTR_EL2寄存器详解与应用
  • 石墨烯地暖高频自动化设备哪家好?2026年石墨烯地暖高频自动化设备/医疗袋高频热合机厂家推荐权威盘点:华日金菱领衔 - 栗子测评
  • 2026年怎么挑商用和面机厂家?核心技术看这几点 - 优质品牌商家
  • ARM SPE性能分析:PMSIDR_EL1寄存器详解与实践
  • Coordinate IM 系统 - 企业即时通讯解决方案
  • 【教学类-160-14】20260425 AI视频培训-练习014“豆包AI视频《月下枯蔷(哥特风)》+豆包图片风格:油画”
  • ARMv8/v9异常处理与ESR_EL2寄存器深度解析
  • ContextFlow视频对象编辑技术解析与应用实践
  • Increasing Triplet Subsequence贪心解法分析
  • 2026微晶铝采购指南:如何识别服务好的供应商?半导体设备镜面铝/医疗设备镜面铝/微晶铝,微晶铝企业口碑推荐 - 品牌推荐师
  • UL94阻燃等级
  • VxWorks网络通信模块:网络协议栈解析(第二部分)
  • 元组、列表、集合、字典和切片
  • 开源任务监控利器:Agent-Job-Monitor 架构解析与生产实践
  • 2026北航计算机学院保研硕士预推免面经
  • 2026年3月质量好的盛雷城代理厂家怎么选,低温漂高精密电阻/车规级精密电阻/荣誉代理,盛雷城代理品牌怎么选择 - 品牌推荐师