剑指 Offer 30. 包含min函数的栈【辅助栈】
文章目录
- 剑指 Offer 30. 包含min函数的栈【辅助栈】
- 题目描述
- 题解
题目描述
题解
class MinStack
{
/**
* initialize your data structure here.
*/
Stack<Integer> A, B;
public MinStack()
{
A = new Stack<Integer>();
B = new Stack<Integer>();
}
public void push(int x)
{
A.push(x);
if (B.isEmpty() || B.peek() >= x)
{
B.push(x);
}
}
public void pop()
{
int x = A.pop();
if (B.peek() == x)
{
B.pop();
}
}
public int top()
{
return A.peek();
}
public int min()
{
return B.peek();
}
}
本题采用辅助栈
- 构建两个栈A与B
- 当进行入栈操作时,元素进入栈A,栈B为空时或者栈B的顶端的元素比当前准备入栈的元素等于或大于时,当前元素入栈B,此时可以保证A中的元素符合栈的顺序,B中的元素成从栈顶到栈底为从小到大的次序(即当前元素肯定不大于底部的元素)
- 当进行出栈操作时,比较栈A栈顶元素和栈B栈顶元素,当相等时,栈A与栈B同时出栈,否则只有栈A出栈
- 当访问栈顶元素时候,只需要访问A的栈顶元素即可