题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
算法设计
题目中要求min函数时间复杂度为O(1),也就说明要求在push的过程中就存下最小值。要注意的是,如果最小值被弹出后,min要变为次小值。因此要借助一个辅助栈来存储每次压入一个新数字的时候,栈中的最小值。
步骤:
- push时,min_stack中压入min{value, min_stack.top()}。
- pop时,min_stack直接弹出。
C++代码
class Solution {
public:
stack<int> s, min_stack;
void push(int value) {
s.push(value);
if(min_stack.size() == 0){
min_stack.push(value);
return;
}
if(value <= min_stack.top()){
min_stack.push(value);
}
else{
min_stack.push(min_stack.top());
}
}
void pop() {
if(s.size() == 0){
return;
}
s.pop();
min_stack.pop();
}
int top() {
return s.top();
}
int min() {
return min_stack.top();
}
};