首页 > 代码库 > 剑指OFFER之包含min函数的栈
剑指OFFER之包含min函数的栈
- 题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
接下来有n行,每行开始有一个字母Ci。
Ci=’s’时,接下有一个数字k,代表将k压入栈。
Ci=’o’时,弹出栈顶元素。
- 输出:
对应每个测试案例中的每个操作,
若栈不为空,输出相应的栈中最小元素。否则,输出NULL。
- 样例输入:
7s 3s 4s 2s 1oos 0
- 样例输出:
3321230
Code:#include <iostream>#include <cstdio>#include <stack> using namespace std; int main(){ int n; char operation; stack<int> stack1,stack2; while(cin>>n){ int k,minVal; bool isFirst=true; getchar(); while(stack1.empty()==false) stack1.pop(); while(stack2.empty()==false) stack2.pop(); for(int cnt=0;cnt<n;++cnt){ cin>>operation; if(operation==‘s‘){ cin>>k; if(isFirst){ minVal=k; isFirst=false; }else{ if(k<minVal) minVal=k; } cout<<minVal<<endl; stack1.push(k); stack2.push(minVal); } if(operation==‘o‘){ if(stack1.empty()==true&&stack2.empty()==true){ cout<<"NULL"<<endl; isFirst=true; //当stack为空的时候要把isFirst重新置为true }else{ stack1.pop(); //题目要求是先出栈,再把栈顶元素输出 stack2.pop(); if(stack1.empty()==true&&stack2.empty()==true){ //这个时候2个stack还是有可能为空 cout<<"NULL"<<endl; isFirst=true; }else{ int topVal=stack2.top(); minVal=topVal; //修改栈顶元素弹出后stack2中的最小值 cout<<topVal<<endl; } } } } } return 0;} /************************************************************** Problem: 1522 User: lcyvino Language: C++ Result: Accepted Time:120 ms Memory:1524 kb****************************************************************/
剑指OFFER之包含min函数的栈
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。