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.
题意:
就是用一个栈来实现push,pop,top和搜索栈中的最小元素。
一开始拿到这个题,LZ觉得很简单啊,就是普通的栈操作,其实这道题的难点在于求这个栈的最小元素。因为普通的栈没有一个指针依次指向后一个,所以只能通过top来求这个栈的最小值,那么这时候就得考虑单独另设一个专门用来存储最小值的栈。即当每一次将一个元素压栈的时候,都先判断一下这个要压栈的元素与最小值栈中的头节点元素的值进行比较,如果这个值比最小值栈中的头节点的值要小于或等于,则也将其压入最小值栈中;那么在出栈的时候,需要和原来的那个栈的出栈元素比较,如果最小值栈的栈顶元素和原来那个栈的栈顶元素一致,那么同时将最小值栈的栈顶元素和原来栈的栈顶元素压出栈,这样可以确保最小值栈和原来栈的元素的同步。这里的最小值栈是一个妙用。
class MinStack 
{
    Stack<Integer> stack = new Stack<Integer>();
    Stack<Integer> min_stack = new Stack<Integer>();
    public void push(int x) 
    {
        stack.push(x);
        if(min_stack.isEmpty() || x <= min_stack.peek())
            min_stack.push(x);
    }

    public void pop() 
    {
        //int current = stack.pop();
        
            if(stack.peek().equals(min_stack.peek())) //这里要用equals方法,而不能简单的用==,因为对于stack的peek元素是基本类型,所以要用equals方法,否则比较的是空间的地址,而非内容。
                min_stack.pop();
            stack.pop();
        
    }

    public int top() 
    {
        //if(!stack.isEmpty())
          return stack.peek();
    }

    public int getMin() 
    {
        //if(!min_stack.isEmpty())
            return min_stack.peek();
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值