题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.min(); --> 返回 -2.
解题思路
思路参照 LeetCode 题解区大佬 krahets的题解
创建两个栈,栈 A 用于正常压栈和弹栈。栈 B 用于记录当前最小的数,若当前压进栈 A 的值小于等于栈 B 的顶部,那么将这个数同时也压进栈 B。
Java代码实现
class MinStack {
/** initialize your data structure here. */
private Stack<Integer> stackA;
private Stack<Integer> stackB;
public MinStack() {
stackA = new Stack<Integer>();
stackB = new Stack<Integer>();
}
public void push(int x) {
stackA.push(x);
if (stackB.empty() || stackB.peek() >= x) {
stackB.push(x);
}
}
public void pop() {
int val = stackA.pop();
if (val == stackB.peek()) stackB.pop();
}
public int top() {
return stackA.peek();
}
public int min() {
return stackB.peek();
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(x);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.min();
*/ 
京公网安备 11010502036488号