LeetCode:155.最小栈

不需要自己手写实现一个栈,可以使用Stack来完成栈操作,关键点在于常数时间内能检索到最小值,需要使用辅助存储最小值。

这个辅助存储的特点:如果入栈的时候的值比栈里面所有元素都小(或者相等),需要记录下这个值,如果后面这个值出栈了,记录里面也要删除这个值,如果这个值没出栈,那么这个值前面的元素的值肯定比这个值大;具有最近相关性,使用栈来存储

public class MinStack {

	//内部栈,存储元素
	Stack<Integer> innerStack;
	//存储最小值的栈
	Stack<Integer> minValueStack;
	
    /** initialize your data structure here. */
    public MinStack() {
    	innerStack = new Stack<>();
    	minValueStack = new Stack<>();
    }
    
    public void push(int x) {
    	innerStack.push(x);
    	if(minValueStack.isEmpty() || x<=minValueStack.peek()) {
    		minValueStack.push(x);
    	}
    }
    
    public void pop() {
    	int popValue = innerStack.pop();
    	if(popValue==minValueStack.peek()) {
    		minValueStack.pop();
    	}
    }
    
    public int top() {
    	return innerStack.peek();
    }
    
    public int getMin() {
    	return minValueStack.peek();
    }
    
    public static void main(String[] args) {
    	MinStack minStack = new MinStack();
    	minStack.push(-2);
    	minStack.push(0);
    	minStack.push(-3);
    	System.out.println(minStack.getMin());   //--> 返回 -3.
    	minStack.pop();
    	System.out.println(minStack.top());      //--> 返回 0.
    	System.out.println(minStack.getMin());   //--> 返回 -2.
	}
}

这里有个小问题,如果minValueStack为空,minValueStack.peek()会返回空指针异常;但是并不影响通过

类似的问题还有:

使用栈来实现队列:可以使用两个栈来解决

使用队列来实现栈:可以用两个队列来解决

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值