设计一个getMin功能的栈

题目

实现一个特殊的栈,在实现栈的基本功能的基础之上,再返回栈中最小元素的操作

要求

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()) 
}

代码下载地址

感谢

如果感觉对您的学习工作有帮助,请将它分享给需要的人,或者点赞鼓励一下,感谢支持
我还会不断更新。。。

猜你喜欢

转载自blog.csdn.net/XINpxXIN/article/details/104288648