题目描述
设计一个支持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.
双栈维护
这里面除了最小值,其余操作都有C++STL中stack完美封装,不必多说毕竟语言就是来偷懒用的 我们重点说一下最小值算法.其实啊,这道题目可以不用单调栈,而是再开一个栈,专门用来维护最小值,每读入一个数,就min_ans.push(min_ans.top(),x)
专门存储当前最小值就好了.
C++ 代码
class MinStack {
public:
stack<int> ans,ans_min;
MinStack() {
}
void push(int x) {
ans.push(x);
if (ans_min.empty() || ans_min.top()>x)
ans_min.push(x);
else
ans_min.push(ans_min.top());
}
void pop() {
ans.pop();
ans_min.pop();
}
int top() {
return ans.top();
}
int getMin() {
return ans_min.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();
*/
作者:秦淮岸~灯火阑珊
链接:https://www.acwing.com/activity/content/code/content/21521/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。