题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- 解读:实现一个栈,能够得到栈最小元素的min函数,要求复杂度为O(1)
思路
/*
* 思路:用两个栈结构来完成这个功能,用一个栈data保存数据,用另外一个栈min保存依次入栈最小的数
* 比如,data中依次入栈,5, 4, 3, 8, 10, 11, 12, 1
则min依次入栈,5, 4, 3,no,no, no, no, 1
* no代表此次不入栈
* 每次入栈的时候,如果入栈的元素比min中的栈顶元素小或等于则入栈,否则不入栈。
*/
class Solution {
public:
stack<int> dataStack;
stack<int> minStack;
void push(int value) {
dataStack.push(value);
if(minStack.empty()){
minStack.push(value);
}else{
if(minStack.top() > value){
minStack.push(value);
}
}
}
void pop() {
if(!minStack.empty() && minStack.top() == dataStack.top()){
minStack.pop();
}
dataStack.pop();
}
int top() {
return dataStack.top();
}
int min() {
return minStack.top();
}
};