面试总结 - 基础编程 - 实现时间复杂度为O(1)的栈2.js

实现一个时间复杂度为O(1)的栈,要求该栈具备入栈、出栈、取最大值功能。
下面是我的一个简单实现,大佬勿笑,如有错误,请指正。

function Stack () {}

// 栈相关数据不能直接通过实例来访问,所以直接挂在Stack类上
Stack.contain = [];
Stack.max = 0;
Stack.maxContain = [];

// 入栈
Stack.prototype.setItem = function (value) {
  Stack.contain.unshift(value);
  if (value > Stack.max) {
    Stack.max = value;
    Stack.maxContain.unshift(value);
  }
}
// 出栈
Stack.prototype.getItem = function () {
  Stack.warn();
  const value = Stack.contain[0];
  Stack.contain.shift();
  if (value === Stack.maxContain[0]) {
    Stack.maxContain.shift();
    Stack.max = Stack.maxContain[0]
  }
  return value;
}
// 获取最大值
Stack.prototype.getMax = function () {
  Stack.warn();
  return Stack.max;
}
// 将当前栈容器的所有值暴露出去
Stack.prototype.show = function () {
  return Stack.contain;
}
// 将当前栈最大值容器的所有值暴露出去
Stack.prototype.showMaxContain = function () {
  return Stack.maxContain;
}

Stack.warn = function () {
  if (!Stack.contain.length) {
    console.warn(`不能对空栈执行此操作`)
  }
}

// test
const stack = new Stack();
const testArr = [2, 6, 9.8, 9, 3, 1, 2];
testArr.forEach((item) => {
  stack.setItem(item)
})
testArr.forEach(item => {
  console.log(`
  Stack.contain: ${stack.show()}
  stack.getMax: ${stack.getMax()}
  stack.showMaxContain: ${stack.showMaxContain()}
  stack.getItem: ${stack.getItem()}
  `)
})

精品句子

当我把一个群消息设置成免打扰模式时,我就知道这个群已经和我没多大联系了。随时可以退群的那种… 切实感悟~~ 捂脸


3分钟,了解天下大事

每天花3分钟在【每日全搜索】上,可尽知天下大事。
把省下来的时间留给自我技术沉淀噻~
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值