包含min函数的栈
原题:
设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。
- push(x)–将元素x插入栈中
- pop()–移除栈顶元素
- top()–得到栈顶元素
- getMin()–得到栈中最小元素
样例
MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(3);
minStack.push(-4);
minStack.getMin(); --> Returns -4.
minStack.pop();
minStack.top(); --> Returns 3.
minStack.getMin(); --> Returns -1.
思路:
设计一个能够在o(1)时间内检索出最小元素的堆栈,我们可以借助一个辅助栈存储最小元素。辅助栈的栈顶一定是最小的元素。
压栈时,判断压栈的元素与辅助栈栈顶元素的大小,如果需要压栈的元素小于辅助栈栈顶元素,则将该元素压入辅助栈。
代码:
class MinStack {
public:
/** initialize your data structure here. */
//辅助栈,栈顶元素一定是最小值
stack<int> minstack;
stack<int> resstack;
MinStack() {
}
void push(int x) {
resstack.push(x);
//如果辅助栈为空,或者当前元素小于等于(可能最小值元素有好多个)辅助站栈顶的元素,则压入辅助栈
if(minstack.empty() || minstack.top() >= x){
minstack.push(x);
}
}
void pop() {
if(resstack.top() == minstack.top()){
minstack.pop();
}
resstack.pop();
}
int top() {
//返回栈顶元素
return resstack.top();
}
int getMin() {
return minstack.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.getMin();
*/