题目
最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
思路
- 设计一个存储最小元素的栈,来与数据栈一一对应,表示当前数据对应的最小元素。
static class MinStack {
Stack<Integer> data = new Stack();//存储元素的顺序栈
Stack<Integer> minStack = new Stack();//存储最小元素的栈
public MinStack() {}
public void push(int val) {
if (data.isEmpty()){
data.push(val);
minStack.push(val);
} else {
Integer min = minStack.peek();
if (val < min){
minStack.push(val);
} else {
minStack.push(min);
}
data.push(val);
}
}
//删除栈顶元素
public void pop() {
data.pop();
minStack.pop();
}
//只是获取栈顶元素,并不删除
public int top() {
return data.peek();
}
//常数时间获取最小元素
public int getMin() {
return minStack.peek();
}
}