實現一個時間複雜度爲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()}
`)
})
當我把一個羣消息設置成免打擾模式時,我就知道這個羣已經和我沒多大聯繫了。隨時可以退羣的那種… 切實感悟~~ 捂臉