思路:

  • 建两个栈
  • 思路一:
  • 1、push时主栈存放数值,辅助栈存放对应数值时的最小值(需要辅助栈起始值为无穷大)
  • 2、pop时主栈弹出,辅助栈也弹出
  • 思路二:
  • 1、push时主栈存放数值,如果辅助栈没有值或者值小于等于辅助栈栈顶值则存入
  • 2、pop时主栈弹出,主栈弹出值若等于辅助栈栈顶值,辅助栈也弹出
  • 栈顶值top为主栈栈顶值
  • 最小值min为辅助栈栈顶值
var data_stack = [] // 主栈
var min_stack = [Infinity] // 辅助栈
function push(node)
{
    // 主栈x_stack存放值
    data_stack.push(node)
    // 辅助栈min_stack存入与辅助栈min_stack栈顶作比较后的最小值
    min_stack.push(Math.min(min_stack[min_stack.length - 1],node))
}
function pop()
{
    // 两者都弹出值
    data_stack.pop()
    min_stack.pop()
}
function top()
{
    // 返回主栈x_stack栈顶
    return data_stack[data_stack.length - 1]
}
function min()
{
    // 返回辅助栈min_stack栈顶
    return min_stack[min_stack.length - 1]
}
module.exports = {
    push : push,
    pop : pop,
    top : top,
    min : min
};
var data_stack = [] // 主栈
var min_stack = [] // 辅助栈
function push(node)
{
    // 主栈x_stack存放值
    data_stack.push(node)
    // 辅助栈min_stack如果没有值或新值比辅助栈min_stack栈顶值小则存入值
    if(!min_stack.length || node <= min_stack[min_stack.length - 1]){
        min_stack.push(node)
    }
}
function pop()
{
    // 主栈x_stack弹出值若与辅助栈min_stack栈顶值一致,辅助栈min_stack也弹出值
    if(data_stack.pop() == min_stack[min_stack.length - 1]){
        min_stack.pop()
    }
}
function top()
{
    // 返回主栈x_stack栈顶
    return data_stack[data_stack.length - 1]
}
function min()
{
    // 返回辅助栈min_stack栈顶
    return min_stack[min_stack.length - 1]
}
module.exports = {
    push : push,
    pop : pop,
    top : top,
    min : min
};