javascript内置的方法和通用方法实现栈操作执行时间对比

124 阅读1分钟

1.在leedcode做一道算法题的时候,试着用两种不同的方法街道下面这道题的时候,执行的时间有明显的差异。 例子如下

1.题目

image.png 题解:

常用方法求解:

class MinStack {
  constructor () {
    this.stackA = []
    this.countA = 0
    this.stackB = []
    this.countB = 0
  }
  push (item) {
    this.stackA[this.countA++] = item
    if (this.countB === 0 || this.min() >= item) {
      // console.log("b的入栈")
      this.stackB[this.countB++] = item
    }
  }
  pop () {
    // 如果A栈顶的值为 === B栈顶的值 执行B出栈操作
    if (this.top() === this.min()) {
      delete this.stackB[--this.countB]
    }
    // 栈b出栈
    delete this.stackA[--this.countA]
  }
  min () {
    return this.stackB[this.countB - 1]
  }
  top () {
    return this.stackA[this.countA - 1]
  }
}

image.png

利用内置方法实现栈的操作

class MinStack {
  constructor () {
    this.stack = []
  }
  push (item) {
    this.stack.push(item)
  }
  pop (item) {
    this.stack.pop(item)
  }
  min () {
    return Math.min.apply(null, this.stack)
  }
  top () {
    return this.stack[this.stack.length - 1]
  }
}

image.png

总结

第一种方法通常比第二种方法执行时间更加短,但第二种方法编码效率比第一种高,且比第一种更容易理解。