1.在leedcode做一道算法题的时候,试着用两种不同的方法街道下面这道题的时候,执行的时间有明显的差异。 例子如下
1.题目
题解:
常用方法求解:
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]
}
}
利用内置方法实现栈的操作
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]
}
}
总结
第一种方法通常比第二种方法执行时间更加短,但第二种方法编码效率比第一种高,且比第一种更容易理解。