欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【左神算法】包含min函数的栈

程序员文章站 2024-03-15 22:39:00
...

min函数的栈

思路

   思路 使用两个栈 一个栈存储数据 一个栈 存储最小值 
       push()->data栈直接添加 min去记录当前每次push之后的最小值,并将最小值直接添加到minStack栈中
       pop()->dataStack和minStack直接pop 当minStack为null将Integer.MaxValue赋值给minValue 
              否则的话 将minStack当前栈顶的最小元素赋值给minValue

code

  class MinStack{
    /*
        思路 使用两个栈 一个栈存储数据 一个栈 存储最小值 
        push()->data栈直接添加 min去记录当前每次push之后的最小值,并将最小值直接添加到minStack栈中
        pop()->dataStack和minStack直接pop 当minStack为null将Integer.MaxValue赋值给minValue 
                否则的话 将minStack当前栈顶的最小元素赋值给minValue
        */
        private Stack<Integer> dataStack ;//数据栈
        private Stack<Integer> minStack ;//存储最小值栈
        private Integer minValue;
    
        public MinStack() {
            dataStack = new Stack<>();
            minStack = new Stack<>();
            minValue = Integer.MAX_VALUE;
        }
        
        public void push(int x) {
            dataStack.push(x);
            minValue = Math.min(minValue,x);
            minStack.push(minValue);//记录每一次的最小值
        }
        
        public void pop() {
            dataStack.pop();
            minStack.pop();
            minValue = minStack.isEmpty() ? Integer.MAX_VALUE : minStack.peek();
        }
        
        public int top() {
            return dataStack.peek();
        }
    
        public int getMin() {
            return minValue;
        }
    }