题目
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路
- O(1)的复杂度,说明可以一步找到这个值。mainStack用来完成栈的功能,辅助栈minStack用来得到当前栈中最小的值。
- push操作:
- 当元素value入mainStack的时候,分两种情况:
- 若辅助栈为空,value也入辅助栈。
- 若辅助栈不为空且栈顶元素大于value,则value也入辅助栈。
- 假如minStack的栈顶元素为a, mainStack的栈顶元素为b,因为a也在mainStack中,所以在mainStack中,(a,b]范围里的元素都大于a。
- 当元素value入mainStack的时候,分两种情况:
- pop()操作:
- 只有在minStack的栈顶元素和mainStack的栈顶元素相同时,才进行。
push过程的一个例子,pop相反。
代码
class Solution {
private:
stack<int> mainStack;
stack<int> minStack;
public:
void push(int value) {
mainStack.push( value );
if ( minStack.empty() || minStack.top() > value ) {
minStack.push( value );
}
return;
}
void pop() {
if ( mainStack.top() == minStack.top() ) {
minStack.pop();
}
mainStack.pop();
}
int top() {
return mainStack.top();
}
int min() {
return minStack.top();
}
};