剑指Offer之 - 包含min函数的栈

来源:互联网 发布:apt get 修改源码 编辑:程序博客网 时间:2024/04/29 15:34

题目:

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。
在该栈中,调用min,push,pop函数的世界复杂度都是O(1)。

思路:

维护一个辅助栈s2,用来存储当前栈中的最小元素
比如栈s1 :<2,4,3,1,5> ,辅助栈s2就是: <2,2,2,1,1>

代码:

#include<iostream>#include <stack>using namespace std;//功能:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。//在该栈中,调用min,push,pop函数的世界复杂度都是O(1)。//思路:维护一个辅助栈s2,用来存储当前栈中的最小元素//比如栈s1 :<2,4,3,1,5> ,辅助栈s2就是: <2,2,2,1,1>struct StackWithMin{stack<int> s1;stack<int> s2;void push1(int val){s1.push(val);if(s2.empty() || val <= s2.top())s2.push(val);else{s2.push(s2.top());}}int min(){if(!s2.empty())return s2.top();elsereturn -1;}void pop1(){if(!s1.empty() && !s2.empty()){s1.pop();s2.pop();}}};int main(){StackWithMin obj;obj.push1(4);obj.push1(2);obj.push1(3);obj.push1(1);cout<<obj.min()<<endl;obj.pop1();cout<<obj.min()<<endl;}


0 0
原创粉丝点击