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

push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack

解题思路:
用两个栈来实现最小栈,一个用来进行基本的push、pop、top操作,称为数据栈;另一个栈用来存放数据栈里的最小元素,称为最小栈。
1、入栈
数据栈入栈所有元素,最小栈为空时入栈第一个元素,入最小栈的下一个元素必须小于当前最小栈的栈顶元素,否则不入最小栈。
2、出栈
数据栈元素出栈时势必会影响栈内最小元素的取值,所以当数据栈元素出栈时,当数据栈栈顶与最小栈栈顶相同时,最小栈中的元素也进行出栈操作。
3、求栈顶
即返回数据栈的栈顶元素即可
4、求栈内最小元素
在最小栈里取栈顶元素即可

#include <iostream>
#include <stack>
using namespace std;class MinStack {stack<int> m_data;//数据栈stack<int> m_min;//最小栈
public:
//构造函数MinStack() {}
//入栈操作void push(int x) {m_data.push(x);//将元素入栈到数据栈if (m_min.empty() || m_min.top() > x){m_min.push(x);//当最小栈为空或者其栈顶元素大于x时让其入最小栈}}
//出栈操作void pop() {if (m_data.top() == m_min.top()){m_min.pop();//两个栈栈顶元素相同时,最小栈执行出栈操作}m_data.pop();//数据栈出栈}
//求栈顶int top() {return m_data.top();}//求栈里最小元素int getMin() {return m_min.top();//即最小栈的栈顶元素}
};

【最小栈c++】设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈相关推荐

  1. 最小栈的实现(设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。)

    最小栈的实现 思路 两个栈,左边栈接受元素,右边栈存最小的元素 入栈时,先入左边栈,随后进行比较,左边和右边栈顶元素进行比较,如果新元素小,就把新元素放在右边的栈顶位置,如果新元素大,则还是把右边栈顶 ...

  2. 手打配对堆模板(支持push, pop, top, join)

    常数较二叉堆小. 采用 new.delete 分配内存,不喜勿喷. 支持任意类型(需定义 operator< 或传入比较器)(需要默认构造函数) 如有错请指正!谢谢! template<t ...

  3. LeetCode 1381. 设计一个支持增量操作的栈(deque/数组)

    1. 题目 请你设计一个支持下述操作的栈. 实现自定义栈类 CustomStack : CustomStack(int maxSize):用 maxSize 初始化对象,maxSize 是栈中最多能容 ...

  4. 1381. 设计一个支持增量操作的栈

    2020-05-11 1.题目描述 设计一个支持增量操作的栈 2.题解 使用vector在进行增量操作的时候会方便一些,vector支持push_back.pop_back.empty操作. 3.代码 ...

  5. LeetCode 5357. 设计一个支持增量操作的栈

    5357. 设计一个支持增量操作的栈 思路:用数组实现即可 class CustomStack { public:CustomStack(int maxSize) {fill(a,a+1001,-1) ...

  6. python实现栈,实现push(),pop(),top(),getMin()方法

    设计一个栈,该栈可以进行push.pop.top和在常数时间内检索最小值的操作 push(x) – 压一个数到栈顶 pop() – 移除栈顶的元素,不返回任何对象 top() – 返回栈顶端的元素 g ...

  7. 如何设计一个支持1亿用户使用的系统

    高可用架构设计最核心的就是两点:解耦和冗余.解耦包括业务状态分离(无状态架构设计).分库分表等.冗余包括缓存.CDN.主从备份.主主备份.GeoDNS 等.一个好的架构设计需要在产品迭代的不同阶段选择 ...

  8. 如何设计一个支持一亿用户的系统,心中有方案遇事不慌!

    要设计一个支持数亿用户的系统并不容易.对于软件架构师来说,这总是一个很大的挑战(但是读完我的文章

  9. 栈和队列之设计一个有getMin(得到最小值)功能的栈

    有2中方案,分别用类和内部类实现了 import java.util.Stack;/*** @author chenyu 第一种设计:* 题目:设计一个有getMin功能的栈,设计一个特殊的栈,在实现 ...

最新文章

  1. html表格上下移动,Vue实现table上下移动功能示例
  2. KeyMob移动广告聚合平台:类似于房地产中介
  3. CLOSE_WAIT状态的原因与解决方法 --转
  4. 【2D动画】《想你》。。。。难以想象
  5. mysql 两张表合并查询_中级数据分析-多表查询
  6. 【caffe-Windows】以mnist为例lmdb格式数据
  7. mysql bigint转string_无语了,直到今天,我才揪出MySQL磁盘消耗迅猛的“真凶”!...
  8. 开关量光端机产品特点及应用范围介绍
  9. temp变量this变量base变量 c# 1613715552
  10. 计算机视觉基本研究方向
  11. java 线程condition_(七)java多线程之Condition
  12. 国内电影票务系统浅析
  13. 学成在线(一)项目介绍
  14. 自制能自动加载所需RAID驱动的Windows PE系统来安装服务器系统
  15. 易语言取DOS执行结果
  16. 计算机辅助设计技术水平证书,计算机程序设计工程师技术水平(java)证书就是计算机技术与软件专业技术资格考试的程序员证书么?...
  17. 官宣 .NET RC 2
  18. 2012年***名单。
  19. 数据结构和算法二十一
  20. Cesium-Camera-flyto详解

热门文章

  1. dlib人脸识别代码解读
  2. 【Redis】五种存储类型及其底层数据结构
  3. 配置OSPF认证【eNSP实现】
  4. 计算机网络如何配置ospf动态路由,《计算机网络高级配置》第八讲OSPF动态路由协议...
  5. java fxml教程_openjfx(javaFX)完整学习指南(教程)
  6. ACRush 楼天城 回忆录
  7. 字符串常见方法总结:方法的作用、参数、返回值
  8. rstp edgeport
  9. Ae 内置效果控件(合集)
  10. SQL Server安装提示安装程序无法通过windows update服务搜索更新