设计一个getMin功能的栈 | 刷题打卡

104 阅读1分钟

一、题目描述💯

  • 实现一个特殊的栈,在实现栈的基本功能的基础之上,再返回栈中最小元素的操作
  • 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()) 
}

代码下载地址

感谢🙇‍

点赞支持👍