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