题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
题目分析
我们把每次入栈,和辅助栈内的顶部数据比较,如果小于辅助栈的栈顶数据,则把数据把放到辅助栈里,如果不小于,则把辅助栈栈顶的元素再放入辅助栈一次。
代码
/*
题目:
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。
要求:
在该栈中,调用min、push、pop的时间复杂度都是O(1)。
*/
//用一个辅助空间,保存每次推入时的最小值情况,同时伴随弹出这个辅助空间的栈顶最小值也会弹出
function createStack(){
let dataStack = [],
minStack = [];
const pop = function() {
minStack.pop();
return dataStack.pop();
}
const push = function(value) {
dataStack.push(value);
const len = minStack.length;
if(len === 0 || minStack[len - 1] > value) {
minStack.push(value);
} else {
minStack.push(minStack[len - 1]);
}
}
const min = function() {
return minStack[minStack.length - 1];
}
return {
pop,
min,
push,
}
}
let stack = createStack();
stack.push(5)
stack.push()
参考文章:
https://www.cnblogs.com/echovic/p/6472466.html
https://www.cnblogs.com/wuguanglin/p/min.html
https://github.com/DavidChen93/-offer-JS-/blob/master/30.1 包含min函数的栈.js