题目
实现一个特殊的栈,在实现栈的基本功能的基础之上,再返回栈中最小元素的操作
要求
1.pop push getMin的时间复杂度都是O(1)
2.设计栈类型可以使用现成的栈结构
思路
创建两个栈结构,分别为stack,minStack。入栈时,stack正常入栈,minStack则需要判断栈顶元素是否大于入栈的元素,如果是就将入栈的元素压入minStack,出栈时,stack正常出栈,minStack需要判断出栈元素是否与栈顶元素一致,如果是,minStack也需要出栈。获取栈中的最小元素,则只需返回minStack的栈顶元素。
代码实现
var minStack = []
var stack= [];
function push(ele){
stack.unshift(ele);
if(!minStack[0]||ele<=minStack[0]){
minStack.unshift(ele)
}
}
function pop(){
let ele=stack.shift();
if(minStack[0]&&ele==minStack[0]){
minStack.shift()
}
}
function getMin(){
return minStack[0]?minStack[0]:null
}
简单测试
let arr1 = [7,5,3,2,5,8,9,8,7,9,4,5,6,2,3,1,5,4,6,5,12]
for (let index = 0; index < arr1.length; index++) {
push(arr1[index]);
}
console.log(stack)
console.log(minStack)
for (let index = 0; index < arr1.length; index++) {
pop(stack[index])
console.log(`删除${
index}元素:`,getMin())
}
代码下载地址
感谢
如果感觉对您的学习工作有帮助,请将它分享给需要的人,或者点赞鼓励一下,感谢支持
我还会不断更新。。。