剑指 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的栈顶元素即可



















