剑指 Offer 30. 包含min函数的栈【辅助栈】

剑指 Offer 30. 包含min函数的栈【辅助栈】

文章目录

  • 剑指 Offer 30. 包含min函数的栈【辅助栈】
    • 题目描述
    • 题解

题目描述

剑指 Offer 30. 包含min函数的栈【辅助栈】_第1张图片

题解

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();
	}
}

本题采用辅助栈

  1. 构建两个栈A与B
  2. 当进行入栈操作时,元素进入栈A,栈B为空时或者栈B的顶端的元素比当前准备入栈的元素等于或大于时,当前元素入栈B,此时可以保证A中的元素符合栈的顺序,B中的元素成从栈顶到栈底为从小到大的次序(即当前元素肯定不大于底部的元素)
  3. 当进行出栈操作时,比较栈A栈顶元素和栈B栈顶元素,当相等时,栈A与栈B同时出栈,否则只有栈A出栈
  4. 当访问栈顶元素时候,只需要访问A的栈顶元素即可

你可能感兴趣的:(算法,JAVA,leetcode,java,leetcode,辅助栈)