最小栈
设计一个支持
push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。实现
MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。
思路:
两个栈:一个com_satck用于正常存储元素,另一个min_stack用于实时记录com_stack的最小元素
大体流程:
- push:com_stack正常push,min_stack取(当前的最小值)和(新进入的元素)之间的最小值push
- pop:com_stack和min_stack正常pop
- getMin:即min_stack的top
代码:
class MinStack {
public:
MinStack() {
}
void push(int val) {
com_stack.push(val);
if(min_stack.size()&&val>min_stack.top())min_stack.push(min_stack.top());
else{
min_stack.push(val);
}
}
void pop() {
com_stack.pop();
min_stack.pop();
}
int top() {
return com_stack.top();
}
int getMin() {
return min_stack.top();
}
stack<int> com_stack;
stack<int> min_stack;
};