题目1522:包含min函数的栈-九度
来源:互联网 发布:杨振宁 国籍 知乎 编辑:程序博客网 时间:2024/04/28 20:00
- 题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
接下来有n行,每行开始有一个字母Ci。
Ci=’s’时,接下有一个数字k,代表将k压入栈。
Ci=’o’时,弹出栈顶元素。
- 输出:
对应每个测试案例中的每个操作,
若栈不为空,输出相应的栈中最小元素。否则,输出NULL。
- 样例输入:
7s 3s 4s 2s 1oos 0
- 样例输出:
3321230
推荐指数:※※
来源:http://ac.jobdu.com/problem.php?pid=1522
这道题目是让在栈的操作基础上,在实现可以返回最小值的算法。直接想到的,就是在开一个最小值栈,要来记录每个次操作后的最小值。可参见海涛的博客: http://zhedahht.blog.163.com/blog/static/25411174200712895228171/
简单版本:
#include <iostream>#include<stdio.h>#include<string.h>#include<stack>using namespace std;int main(){int n,i;stack<int> st;stack<int> min_st;scanf("%d",&n);for(i=0;i<n;i++){char ch[2];int tmp;scanf("%s",ch);if(ch[0]=='s'){scanf("%d",&tmp);if(min_st.empty()||min_st.top()>tmp){st.push(tmp);min_st.push(tmp);}else{st.push(tmp);min_st.push(min_st.top());}}else{if(!st.empty()){st.pop();min_st.pop();}}if(!min_st.empty())printf("%d\n",min_st.top());elseprintf("NULL\n");}return 0;}
但这在空间上需要O(n),看了@anchor89 提出http://blog.csdn.net/anchor89/article/details/6055412空间O(1)的方法,值得学习。
这个算法的本质是让栈顶的元素带有更多的信息。通过运算(tmp-min),是的正负号带有的是否是min的信息。
#include<iostream>#include<stdio.h>#include<string.h>#include<stack>using namespace std;int main(){int n,i;stack<int> st;int min;scanf("%d",&n);for(i=0;i<n;i++){char ch[2];int tmp;scanf("%s",ch);if(ch[0]=='s'){scanf("%d",&tmp);if(st.empty()){st.push(tmp);min=tmp;}else if(tmp<min){st.push(tmp-min);min=tmp;}else{st.push(tmp);}}else{if(!st.empty()){if(st.top()<0)min=min-st.top();st.pop();}}if(!st.empty())printf("%d\n",min);elseprintf("NULL\n");}return 0;}
- 题目1522:包含min函数的栈-九度
- 【九度】题目1522:包含min函数的栈
- 九度oj 题目1522:包含min函数的栈
- 九度 题目1522:包含min函数的栈
- 九度_题目1522:包含min函数的栈
- 九度OJ-题目1522:包含min函数的栈
- 【LeetCode】Min Stack && 【九度】题目1522:包含min函数的栈
- 九度题目1522——包含min函数的栈
- 【剑指Offer面试编程题】题目1522:包含min函数的栈--九度OJ
- 题目1522:包含min函数的栈
- 题目1522:包含min函数的栈
- 题目1522:包含min函数的栈
- 题目1522:包含min函数的栈
- 题目1522:包含min函数的栈
- 题目1522:包含min函数的栈
- 题目1522:包含min函数的栈
- 题目1522:包含min函数的栈
- 题目21:包含min函数的栈
- MongoDB自学笔记8--- 3.3 MongoDB Shell简介及简单使用
- timus 1572. Yekaterinozavodsk Great Well URAL 解题报告
- SQL 2005 完全卸载
- HDU 3047 并查集
- Unity3D性能优化之合并网格
- 题目1522:包含min函数的栈-九度
- 数据绑定时出现"这将导致集合中的两个绑定绑定到同一个属性"错误.
- LeetCode-Same Tree
- ids for this class must be manually assigned before calling save()
- IP数据报格式(网络层简介)
- SQL 2005 完全卸载
- POJ 2926 Requirements【最远曼哈顿距离】
- Android NDK学习与环境搭建
- linux下搭建datagurad(物理方式)