每天劍指一點offer之JavaScript得到棧中所含最小元素

定義棧的數據結構,請在該類型中實現一個能夠得到棧中所含最小元素的min函數
(時間複雜度應爲O(1))
首先分析一下棧,可以實現嗎?

在這裏插入圖片描述
棧是先進後出,但是如果有一個輔助棧記錄整個棧中最小元素,則可以實現。

var stack = [];
var minStack = [];//輔助棧
length = 0;
//push
//插入元素
//在堆棧頂部插入一個新元素,該元素位於當前頂部元素之上。
//pop
//刪除上面的元素。出棧

/* 維護兩個棧stack,stackmin,分別記錄輸入的所有值 和 最小值
每輸入一個值,正常入stack棧,但是如果比棧stackmin的棧頂元素小的話,則入stackmin棧,否則stackmin中的棧頂元素重複入棧一次,
這樣做是爲了保證每次取最小值都能取到stack中所含元素的最小值 */
function push(node)//插入元素
{
    // write code here
    if(length === 0){
        minStack.push(node);
    }else if(node > minStack[minStack.length-1]){
        stack.push(node);
    }else{
        minStack.push(node);
        stack.push(node);
    }
    length++;
}
function pop()//刪除元素
{
    // write code here
    if(length === 0){
        return null;
    }else if(stack[stack.length-1] === minStack[minStack.length-1]){
        minStack.pop();
        return stack.pop();
    }else{
        return stack.pop();
    }
    length--;
}
function top()
{
    // write code here
    return stack[0];
}
function min()
{
    // write code here
    return minStack[minStack.length-1];
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章