155. Min Stack

一、题目

  1、审题

  

  2、分析

    设计一个 minStack,使其有  pop、push、top、getMin 功能,且 getMin 的检索时间为常数。

二、解答

  1、思路:

     采用一个 Stack 进行实现。

      ①、采用变量 min 记录站中的最小值。

      ②、若入栈元素 p >= min,则 P 入栈。否则 min 先入栈,p 再入栈,且min 值修改为 P。当 p 出栈时,min即可再次通过出栈获得。

   

  int min = Integer.MAX_VALUE;
    Stack<Integer> stack = new Stack<>();
    /** initialize your data structure here. */
    public MinStack() {
    }
    
    public void push(int x) {

        if(x <= min) {
            stack.push(min);     // 若 min >= x, 将前一个 min 埋在下边一个位置
            min = x;
        }
        stack.push(x);            // x 埋入
    }
    
    public void pop() {
        
        if(stack.pop() == min)    // 若出栈元素为 min 
            min = stack.pop();    // 则前一个 min 为再次出栈
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return min;
    }

      

原文地址:https://www.cnblogs.com/skillking/p/9783447.html