剑指offer-包含min函数的栈

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

思路

把每次的最小元素(之前的最小元素和新压入战的元素两者的较小值)都保存起来放到另外一个辅助栈里。

如果每次都把最小元素压入辅助栈, 那么就能保证辅助栈的栈顶一直都是最小元素.当最小元素从数据栈内被弹出之后,同时弹出辅助栈的栈顶元素,此时辅助栈的新栈顶元素就是下一个最小值。

 Stack<Integer> dataStack = new Stack<Integer>();  // 数据栈
    Stack<Integer> minStack = new Stack<Integer>();   // 辅助栈
    
    public void push(int node) {
        dataStack.push(node);
        if(minStack.isEmpty() || minStack.peek() > node ) {
            minStack.push(node);
        } else {
            minStack.push(minStack.peek());
        }  
    }
    
    public void pop() {
        if(!dataStack.isEmpty() && !minStack.isEmpty()) {
            dataStack.pop();
            minStack.pop();
        }
    }

    public int min() {
        int min = 0;
        if(!dataStack.isEmpty() && !minStack.isEmpty()) {
            min = minStack.peek();
        }
        return min;
    }
原文地址:https://www.cnblogs.com/zywu/p/5775098.html