【剑指offer】包含min函数的栈,C++实现
1.题目
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中调用push、pop、top、min的时间复杂度都是o(1)。
2.思路
定义一个辅助栈,用于存放数据栈每次入栈时的最小元素,辅助栈的栈顶元素是数据栈内最小值。
举例:创建一个空数据栈和空辅助栈。
1.数据栈中压入3,辅助栈为空栈,最小值为3,辅助栈压入3
2.数据栈中压入4,4大于辅助栈的栈顶元素3,最小值为3,辅助栈压入3
3.数据栈中压入2,2小于辅助栈的栈顶元素3,最小值为2,辅助栈压入2
4.数据栈中压入1,1小于辅助栈的栈顶元素2,最小值为1,辅助栈压入1
5.数据栈弹出栈顶元素,辅助栈弹出栈顶元素,辅助栈弹出栈顶元素后的栈顶元素是当前数据栈的最小值
6.数据栈弹出栈顶元素,辅助栈弹出栈顶元素,辅助栈弹出栈顶元素后的栈顶元素是当前数据栈的最小值
注意:数据栈和辅助栈操作同步,即对数据栈插入时,同时辅助栈也插入;弹出数据栈栈顶元素时,同时弹出辅助栈栈顶元素。
3.代码
class Solution {
public:
void push(int value)
{
data.push(value); if(data.empty() || value<smin.top())
smin.push(value);
else
smin.push(smin.top());
} void pop()
{
if(!data.empty() && !smin.empty())
{
data.pop();
smin.pop();
}
} int top()
{
return data.top();
} int min()
{
return smin.top();
}
private:
stack<int> data;
stack<int> smin;
};
4.测试用例
- 压入栈的数字比最小数字大
- 压入栈的数字比最小数字小
- 弹出栈的数字是最小数字
- 弹出栈的数字不是最小数字
【剑指offer】包含min函数的栈,C++实现的更多相关文章
- 剑指Offer 包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 思路: 这个题是想得到一个时间复杂度为O(1)的min函数,所以应用一个辅助栈,压的时候,如果A栈的压入比B栈压入 ...
- 剑指offer——包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度为O(1)) 该题是自己第一次采用编程的方式来实现Java中栈的功能,故直接借鉴了大牛的代码 import ...
- python剑指offer 包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). # -*- coding:utf-8 -*- class Solution: def ...
- 用js刷剑指offer(包含min函数的栈)
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 牛客网链接 js代码 const stack1 = [] const stack2 = ...
- 剑指Offer30——包含min函数的栈
剑指Offer30--包含min函数的栈 1. 题目简述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数在该栈中,调用min.push及pop的时间复杂度是O(1). 2. 题 ...
- 剑指offer--27.包含min函数的栈
时间限制:1秒 空间限制:32768K 热度指数:252822 本题知识点: 栈 算法知识视频讲解 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为 ...
- 剑指Offer-20.包含min函数的栈(C++/Java)
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 分析: 因为题目要求得到栈中最小元素的min函数时间复杂度为O(1),这里便不选择遍历栈 ...
- 剑指Offer19 包含min函数的栈
/************************************************************************* > File Name: 19_MinInS ...
- 剑指:包含min函数的栈(min栈)
题目描述 设计一个支持 push,pop,top 等操作并且可以在 O(1) 时间内检索出最小元素的堆栈. push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 get ...
- 剑指offer-包含min函数的栈20
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). class Solution: def __init__(self): self.st ...
随机推荐
- windows批量删除ip
cmd下输入如下命令第一步:netsh -c int ip dump >c:\ip.txt在C盘根目录看到一个ip.txt的文件,内容为当前网卡的设置信息,为了能更直观的看清楚IP的设置信息. ...
- 【ACM】求高精度幂
题目来源:http://poj.org/problem?id=1001&lang=zh-CN 求高精度幂 Time Limit: 500MS Memory Limit: 10000K To ...
- layui和bootstrap 对比
layui和bootstrap 对比 这两个都属于UI渲染框架. layui是国人开发的一套框架,2016年出来的,现在已更新到2.X版本了.比较新,轻量级,样式简单好看. bootstrap 相对来 ...
- 简单描述DataAdapter、DataReader、DataSet、Datatable对比
一.存储的对比 DataReader 从数据库中检索[只读]数据流,存在客户端网络缓冲区,直到Read方法访问它们. DataAdapter 表示一组SQL命令和数据库连接,用于填充DateSet和[ ...
- IE与DOM的事件监听
IE 事件监听 标准DOM不支持 注意几点: window.onload attachEvent detachEvent 标准DOM监听,ie不支持
- centos7 systemctl一些用法
systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体. systemctl is-enabled servicename.service #查询服务是否 ...
- python的os.urandom 的用途
Python中os.urandom(n)的作用 随机产生n个字节(0-255)的字符串,可以作为随机加密key使用~ >>> index = os.urandom(2) >&g ...
- Redis-CentOS7安装
安装 Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 安装步骤: 第一步:redis的源码包上传到linux系统. ...
- 【Mongodb】数据库操作--备份、还原、导出和导入
文章转载自点这里 mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport. mongo ...
- main函数的参数:argc和argv
程序一般是从main函数开始执行的,main函数标准格式: int main(int argc,char **argv) 其中argc是来自shell(或CMD)的参数的个数,argv是char型的二 ...