题目描述:
标签:栈 设计
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
代码:
思路分析:
1、定义两个栈,一个dataStack用来正常存储数据,另一个minStack用来存储每一次push操作当前栈内最小的元素;
2、push操作,dataStack正常push,minStack先判断是否为空,为空直接push,不为空先判断要push的数据和栈顶元素的大小,最后要push两者中的较小值;
3、pop操作,分别pop两个栈的栈顶元素;
4、peek操作,返回dataStack栈顶元素;
5、getMin操作,返回minStack栈顶元素。
class MinStack {
private Stack<Integer> dataStack;
private Stack<Integer> minStack;
/** initialize your data structure here. */
public MinStack() {
dataStack = new Stack<>();
minStack = new Stack<>();
}
public void push(int val) {
dataStack.push(val);
minStack.push(minStack.isEmpty() ? val : Math.min(minStack.peek(), val));
}
public void pop() {
dataStack.pop();
minStack.pop();
}
public int top() {
return dataStack.peek();
}
public int getMin() {
return minStack.peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(val);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/