【leetcode】【155】Min Stack

一、问题描述

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • getMin() -- Retrieve the minimum element in the stack.

二、问题分析

入栈、出栈、取栈顶元素都是普通的栈操作,只有getMin()是新添加的操作,并且要求在常量时间内完成。显然我需要一个额外的数据结构来存储到序列i的最小值,因为涉及到出栈操作把当前的最小值给pop出去,那么这时候应该保存到j的最小值,显然这个“额外的数据结构”不止存一个元素,并且还能进行普通的栈操作。因此我可以额外添加一个栈,只用来保存最小值序列,相应的我需要在pop、push的时候处理额外栈,getMin的时候可以返回top元素(constant time),之前也说过,push操作在额外的栈中需要时刻保证栈顶元素是最小值。具体的看代码。

三、Java AC代码

class MinStack {
    private LinkedList<Integer> stack = new LinkedList<Integer>();
	private LinkedList<Integer> minStack = new LinkedList<Integer>();
    public void push(int x) {
        stack.push(x);
        if (minStack.isEmpty()||minStack.peek()>=x) {
			minStack.push(x);
		}
    }

    public void pop() {
        int popEle = stack.pop();
        if (popEle==minStack.peek()) {
			minStack.pop();
		}
        
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
    	return minStack.peek();
    }
}



你可能感兴趣的:(java,LeetCode,栈)