题目
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数
思路
不可以用个中间变量来存放最小值,这种在对于如栈时最小值的更新是可以起到作用的,但是出栈是若果包含该最小值的变量弹出了,最小值就无法实现更新了,所以用一个辅助栈来实现最小值的更新
辅助栈(m_min)工作原理:
入栈
- 数据进去数据栈(m_data)
- 当辅助栈为空时或要入栈的元素小于辅助栈的栈顶元素,进入辅助栈
- 当它不为空时,把辅助栈的栈顶元素在进行一次入栈操作
出栈
- 数据栈和辅助栈同时弹出栈顶元素
min函数只需返回辅助栈的栈顶元素
class Solution { public: void push(int value) { data.push(value); if(help.empty()||help.top()>=value) help.push(value); else help.push(help.top()); return ; } void pop() { // assert(data.size()>0&&help.size()>0) data.pop(); help.pop(); } int top() { int val=data.top(); data.pop(); help.pop(); return val; } int min() { return help.top(); } private: stack<int> data; stack<int> help; };