设计一个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()) 
}

代码下载地址

感谢

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值