定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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];
}