面试题21包含min函数的栈

来源:互联网 发布:淘宝卖家付款给买家 编辑:程序博客网 时间:2024/06/05 01:58

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

思路: 
如果只用一个元素保存最小的元素,那么当最小的元素被弹出后,就没有办法得到剩余元素中最下的元素。 
所以,最好的办法是将每次的最小元素(之前的最小元素和新压入的元素两者的较小者)都保存起来放到另外一个辅助栈里。

这是剑指offer书中的举例一个模拟过程: 
这里写图片描述

这里写图片描述

#include<iostream>#include<vector>#include<stack>#include<cassert>using namespace std;template<typename T>class StackMin{public:stack<T> data;stack<size_t> minStack;void push(const T& val){data.push(val);if(minStack.size()==0||val<minStack.top())minStack.push(val);elseminStack.push(minStack.top());}void pop(){assert(data.size()>0&&minStack.size()>0);data.pop();minStack.pop();}const T& min(){assert(data.size()>0&&minStack.size()>0);return minStack.top();}};int main(){StackMin<int> s;s.push(3);cout<<s.min()<<endl;s.push(4);cout<<s.min()<<endl;s.push(2);cout<<s.min()<<endl;s.push(1);cout<<s.min()<<endl;s.pop();cout<<s.min()<<endl;s.pop();cout<<s.min()<<endl;s.push(0);cout<<s.min()<<endl;system("pause");return 0;}


原创粉丝点击