【最小栈c++】设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈
设计一个支持 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 操作,并能在常数时间内检索到最小元素的栈相关推荐
- 最小栈的实现(设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。)
最小栈的实现 思路 两个栈,左边栈接受元素,右边栈存最小的元素 入栈时,先入左边栈,随后进行比较,左边和右边栈顶元素进行比较,如果新元素小,就把新元素放在右边的栈顶位置,如果新元素大,则还是把右边栈顶 ...
- 手打配对堆模板(支持push, pop, top, join)
常数较二叉堆小. 采用 new.delete 分配内存,不喜勿喷. 支持任意类型(需定义 operator< 或传入比较器)(需要默认构造函数) 如有错请指正!谢谢! template<t ...
- LeetCode 1381. 设计一个支持增量操作的栈(deque/数组)
1. 题目 请你设计一个支持下述操作的栈. 实现自定义栈类 CustomStack : CustomStack(int maxSize):用 maxSize 初始化对象,maxSize 是栈中最多能容 ...
- 1381. 设计一个支持增量操作的栈
2020-05-11 1.题目描述 设计一个支持增量操作的栈 2.题解 使用vector在进行增量操作的时候会方便一些,vector支持push_back.pop_back.empty操作. 3.代码 ...
- LeetCode 5357. 设计一个支持增量操作的栈
5357. 设计一个支持增量操作的栈 思路:用数组实现即可 class CustomStack { public:CustomStack(int maxSize) {fill(a,a+1001,-1) ...
- python实现栈,实现push(),pop(),top(),getMin()方法
设计一个栈,该栈可以进行push.pop.top和在常数时间内检索最小值的操作 push(x) – 压一个数到栈顶 pop() – 移除栈顶的元素,不返回任何对象 top() – 返回栈顶端的元素 g ...
- 如何设计一个支持1亿用户使用的系统
高可用架构设计最核心的就是两点:解耦和冗余.解耦包括业务状态分离(无状态架构设计).分库分表等.冗余包括缓存.CDN.主从备份.主主备份.GeoDNS 等.一个好的架构设计需要在产品迭代的不同阶段选择 ...
- 如何设计一个支持一亿用户的系统,心中有方案遇事不慌!
要设计一个支持数亿用户的系统并不容易.对于软件架构师来说,这总是一个很大的挑战(但是读完我的文章
- 栈和队列之设计一个有getMin(得到最小值)功能的栈
有2中方案,分别用类和内部类实现了 import java.util.Stack;/*** @author chenyu 第一种设计:* 题目:设计一个有getMin功能的栈,设计一个特殊的栈,在实现 ...
最新文章
- html表格上下移动,Vue实现table上下移动功能示例
- KeyMob移动广告聚合平台:类似于房地产中介
- CLOSE_WAIT状态的原因与解决方法 --转
- 【2D动画】《想你》。。。。难以想象
- mysql 两张表合并查询_中级数据分析-多表查询
- 【caffe-Windows】以mnist为例lmdb格式数据
- mysql bigint转string_无语了,直到今天,我才揪出MySQL磁盘消耗迅猛的“真凶”!...
- 开关量光端机产品特点及应用范围介绍
- temp变量this变量base变量 c# 1613715552
- 计算机视觉基本研究方向
- java 线程condition_(七)java多线程之Condition
- 国内电影票务系统浅析
- 学成在线(一)项目介绍
- 自制能自动加载所需RAID驱动的Windows PE系统来安装服务器系统
- 易语言取DOS执行结果
- 计算机辅助设计技术水平证书,计算机程序设计工程师技术水平(java)证书就是计算机技术与软件专业技术资格考试的程序员证书么?...
- 官宣 .NET RC 2
- 2012年***名单。
- 数据结构和算法二十一
- Cesium-Camera-flyto详解