实现一个时间复杂度为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分钟在【每日全搜索】上,可尽知天下大事。
把省下来的时间留给自我技术沉淀噻~