【劍指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();
    }

}
相關文章
相關標籤/搜索