【剑指Offer】栈——获取栈的最小值

package cn.dzp.flyroc.offer;

import java.util.Stack;

public class StackMinDemo {

    /*题目描述:定义栈的数据结构,请在该类型中实现一个可以获得栈最小元素的min函数*/

    //思路:定义两个栈,一个为数据栈,另外一个为最小值栈


    /*实现步骤:
    *
    * 1、定义两个栈,一个为数据栈,另外一个为最小值栈
    * 2push操做【先进行数据栈入栈,若是最小值栈为空,则将该数据push到最小值数据栈;
    * 最小值栈不为空时,若是push的值要小于最小值栈的栈顶值,则将该数据push到最小值栈】
    * 3pop操做【出栈时,若数据栈pop的元素与最小值栈栈顶的元素相同,则最小值栈也出栈】*/

    //代码实现
    Stack<Integer> stackData = new Stack<>();      //定义数据栈
    Stack<Integer> stackMin = new Stack<>();       //定义最小值栈

    //push操做
    public void push(int node){

        //数据栈正常入栈
        stackData.push(node);

        if (stackMin.isEmpty()){        //最小值栈为空

            stackMin.push(node);
        }else{

            if (node <= stackMin.peek()){       //push值小于最小值栈栈顶元素
                stackMin.push(node);
            }
        }
    }

    //pop操做
    public void pop(){

        if (stackData.pop() == stackMin.peek()){

            stackMin.pop();
        }
    }

    //返回最小值
    public int min(){

        return stackMin.peek();
    }

}
相关文章
相关标签/搜索