【leetcode】【155】Min Stack

144 篇文章 0 订阅

一、问题描述

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值