面試總結 - 基礎編程 - 實現時間複雜度爲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()}
  `)
})

當我把一個羣消息設置成免打擾模式時,我就知道這個羣已經和我沒多大聯繫了。隨時可以退羣的那種… 切實感悟~~ 捂臉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章