如何在 O(1) 中为 Javascript/Typescript 中的堆栈编写弹出函数
How to write a pop function for a stack in Javascript/Typescript in O(1)
我正在尝试在 TypeScript 中构建自己的堆栈,但我在实现 pop() 函数时遇到了问题,该函数可以 运行 在 O(1) 时间复杂度内模仿 Javascript 的原生弹出()函数。我能够删除最顶层的项目,但 Javascript 将堆栈中的索引保留为 undefined
。为了解决这个问题,我过滤堆栈以删除未定义,导致 O(n) 时间复杂度。任何其他在 O(1) 中实现这一点的想法都值得赞赏。当前代码:
public pop(): T {
if (this.isEmpty()) {
throw new Error('Empty Stack');
}
const popped = this.storage[this.size() - 1];
this.stackSize--;
delete (this.storage[this.size() - 1]);
this.storage = this.storage.filter(x => x !== undefined);
return popped;
}
您不需要实际从数组中删除项目
如果你只是调用
this.stackSize--;
你含蓄地说你删除了它
问题是您需要更改所有其他函数以使用索引而不是本机函数
所以顶()
应该像
top(){
return this.stack[this.stackSize-1]
}
等等...
这将实现 O(1)
在JavaScript中,你可以这样缩短数组:
this.storage.length = this.storage.length-1
我正在尝试在 TypeScript 中构建自己的堆栈,但我在实现 pop() 函数时遇到了问题,该函数可以 运行 在 O(1) 时间复杂度内模仿 Javascript 的原生弹出()函数。我能够删除最顶层的项目,但 Javascript 将堆栈中的索引保留为 undefined
。为了解决这个问题,我过滤堆栈以删除未定义,导致 O(n) 时间复杂度。任何其他在 O(1) 中实现这一点的想法都值得赞赏。当前代码:
public pop(): T {
if (this.isEmpty()) {
throw new Error('Empty Stack');
}
const popped = this.storage[this.size() - 1];
this.stackSize--;
delete (this.storage[this.size() - 1]);
this.storage = this.storage.filter(x => x !== undefined);
return popped;
}
您不需要实际从数组中删除项目
如果你只是调用
this.stackSize--;
你含蓄地说你删除了它
问题是您需要更改所有其他函数以使用索引而不是本机函数
所以顶() 应该像
top(){
return this.stack[this.stackSize-1]
}
等等...
这将实现 O(1)
在JavaScript中,你可以这样缩短数组:
this.storage.length = this.storage.length-1