每天剑指一点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];
}
发布了158 篇原创文章 · 获赞 44 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_43277404/article/details/104635666