题目描述:

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

输入:

输入可能包含多个测试样例,输入以EOF结束。

对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。

接下来有n行,每行开始有一个字母Ci。

Ci=’s’时,接下有一个数字k,代表将k压入栈。

Ci=’o’时,弹出栈顶元素。

输出:

对应每个测试案例中的每个操作,

若栈不为空,输出相应的栈中最小元素。否则,输出NULL。

样例输入:

7
s 3
s 4
s 2
s 1
o
o
s 0

样例输出:

3
3
2
1
2
3
0

【解题思路】本题一个最笨的想法就是每次取出所有的栈中的元素然后输出其最小值,然后再从新压入栈,当然这也仅仅是第一反应而已,题目肯定不能这么去解。从最小元素和栈的特点出发,我们每次取的只能是栈顶的元素,那么是不是存在每次取的元素就是我们需要的元素呢,也就是说每次取出的元素都是当前状态下的最小元素。仔细思考一下,我们发现我们可以压栈的时候做文章,我们可以在每次压栈的时候,都压入当前栈状态下的最小元素。

如何做到?若栈为空,但让栈的最小元素就是要压入的元素,直接压入,这个时候我们发现最小元素在栈顶。若栈非空,我们判断即将要压入的元素与栈顶元素(也就是当前栈中的最小元素)哪个小,我们压入小的那个,这样也确保当前栈的最小元素在栈顶。按照此规律压栈,我们能确保每次栈的最小元素在栈顶。

输出的时候只需要取栈顶元素即可。

AC code:

#include <cstdio>
#include <stack>
#include <set>
#include <iterator>
using namespace std; int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
char c[2];
stack<int> stk;
multiset<int> setk;
for(int i=0;i<n;++i)
{
scanf("%s",c);
if(c[0]=='s')
{
int tt;
scanf("%d",&tt);
stk.push(tt);
setk.insert(tt);
}else
{
if(!stk.empty())
{
multiset<int>::iterator it=setk.find(stk.top());
setk.erase(it);
stk.pop();
}
}
if(!stk.empty())
printf("%d\n",*setk.begin());
else
printf("NULL\n");
}
}
return 0;
}
/**************************************************************
Problem: 1522
User: huo_yao
Language: C++
Result: Accepted
Time:20 ms
Memory:1188 kb
****************************************************************/

题目链接:http://ac.jobdu.com/problem.php?pid=1522

九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299

【剑指Offer面试编程题】题目1522:包含min函数的栈--九度OJ的更多相关文章

  1. 剑指Offer(二十):包含min函数的栈

    剑指Offer(二十):包含min函数的栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/ba ...

  2. 《剑指offer》— JavaScript(20)包含min函数的栈

    包含min函数的栈 题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 实现代码 var stack = []; function push(node) { stack. ...

  3. (剑指Offer)面试题21:包含min函数的栈

    题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数. 在该栈中,调用min,push,pop的时间复杂度都是O(1) 思路: 1.除了原来的栈s,增加一个辅助栈s_min,用 ...

  4. 【剑指Offer面试编程题】题目1509:树中两个结点的最低公共祖先--九度OJ

    题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...

  5. 【剑指Offer面试编程题】题目1508:把字符串转换成整数--九度OJ

    题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为一个合法或者非法的字符串,代表一个整数n(1<= n&l ...

  6. 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ

    题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为两个整数m和n(1<=m,n<=10 ...

  7. 【剑指Offer面试编程题】题目1506:求1+2+3+...+n--九度OJ

    题目描述: 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 输入: 输入可能包含多个测试样例. 对于每个 ...

  8. 【剑指Offer面试编程题】题目1356:孩子们的游戏(圆圈中最后剩下的数)--九度OJ

    题目描述: 每年六一儿童节,JOBDU都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为JOBDU的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈. ...

  9. 【剑指Offer面试编程题】题目1355:扑克牌顺子--九度OJ

    题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他 ...

随机推荐

  1. spring+mybatis报Cannot load JDBC driver

    今天做用maven搭建ssm框架的例子,在测试的时候一直报ava.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 这个异常,找 ...

  2. ASP.NET Core搭建多层网站架构【14-扩展之部署到IIS】

    2020/02/03, ASP.NET Core 3.1, VS2019, IIS 10, dotnet-hosting-3.1.1-win.exe 摘要:基于ASP.NET Core 3.1 Web ...

  3. 【笔记5-购物车及地址模块】从0开始 独立完成企业级Java电商网站开发(服务端)

    购物车模块 数据库表设计 购物车表 CREATE TABLE mmall_ cart ( 'id' int(11) NOT NULL AUTO_ INCREMENT, 'user_ id' int(1 ...

  4. js的JSON新方法和历史记录管理

    今天看妙味的视频,一下是一些简单的笔记: 1.JSON的一些新方法: JSON.stringify(); JSON.parse(); 第一个是把js脚本转换成JSON的字符串形式. 而第二个则是吧这种 ...

  5. PyQt5程序基本结构分析

    面向过程版 # 0. 导入需要的包和模块 from PyQt5.Qt import * # 包含了我们常用的QT中的一些类 import sys # 一个内置的模块,系统相关操作 # 代码执行的时候, ...

  6. Java基础题目

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析:兔子的规律为数列1,1,2,3,5,8, ...

  7. plus接口

    //获取手机端本地文件路径 plus.io.resolveLocalFileSystemURL(url, success(e){ }, fail(e){ })

  8. Mac 如何导出ipa文件中Assets.car包中的切图

    在之前 获取 AppStore 中 应用 的 IPA 包文件(Mac OS 13+)中获取到应用的 IPA 包,可以取出应用的部分图片(如 Logo),如果项目工程中把图片添加到 Assets.xca ...

  9. 一次从Github向Gitee迁库踩坑记录

    先上结论:gitee的lfs功能收费,直接从github迁移包含lfs管理的文件会出错,配置lfs.url即可解决问题 Q: 为什么要迁库呢? A: github访问太慢了,不然我也不想费这个功夫! ...

  10. 在一个不稳定的无效的ViewState净的应用问题。 Erratic Invalid Viewstate issue in a .NET application

    这似乎是很多人都经历了同样的IE8的问题.似乎发生的是,不知何故,IE8(在IE8的渲染模式和IE7兼容模式)将失去4096个字节的HTML文档中该数据缺失导致此异常(通常你看到这一scriptres ...