题目链接:biubiubiu
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
- push(x) – 将元素 x 推入栈中。
- pop() – 删除栈顶的元素。
- top() – 获取栈顶元素。
- getMin() – 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
注意:
- 你只能使用标准的栈操作-- 也就是只有push to top, peek/pop from top, size, 和is empty操作是合法的。
- 你所使用的语言也许不支持栈。你可以使用 list 或者 deque (双端队列) 来模拟一个栈,只要是标准的栈操作即可。
- 假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
加一个变量存储当前的最小值,每次push时,如果新push进来的元素比当前的最小值还要小,将当前的最小值与要push的数据一起push(一共push两次),再修改最小值;pop时,如果正好pop出最小的元素,那么下一个最小的元素一定就在栈顶,赋值后再pop出去(pop两次)。
我的代码:
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
min = INT_MAX;
}
void push(int x) {
if(x <= min){
ans.push(min);
min = x;
}
ans.push(x);
}
void pop() {
int top = ans.top();
ans.pop();
if(top == min){
min = ans.top();
ans.pop();
}
}
int top() {
return ans.top();
}
int getMin() {
return min;
}
private:
int min;
stack<int> ans;
};