题目链接: https://leetcode-cn.com/problems/min-stack/
题解思路:本题思路巧妙,有点困难的在于获取栈中的最小元素。因为我们知道,栈遵循先进后出的原则,所以无法直接对它判断最小值。这时我们引入辅助栈,对辅助栈入栈的元素进行判断,将较小值留在栈顶,方便top操作。其余操作和栈基本操作类似。
class MinStack {
Deque<Integer> xStack;
Deque<Integer> minStack;
public MinStack() {
xStack = new LinkedList<Integer>();//初始化栈
minStack = new LinkedList<Integer>();//初始化辅助栈
minStack.push(Integer.MAX_VALUE);
}
public void push(int x) {
xStack.push(x);
minStack.push(Math.min(minStack.peek(), x));//将较小值放在辅助栈栈顶
}
public void pop() {//原始栈和辅助栈同步操作
xStack.pop();
minStack.pop();
}
public int top() {
return xStack.peek();//原始栈栈顶
}
public int getMin() {
return minStack.peek();//辅助栈栈顶即为最小值
}
}