设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack()初始化堆栈对象。void push(int val)将元素val推入堆栈。void pop()删除堆栈顶部的元素。int top()获取堆栈顶部的元素。int getMin()获取堆栈中的最小元素。
class MinStack {
private stack: number[] = [];
private minStack: number[] = []; // 辅助栈,栈顶始终是当前主栈中的最小值
constructor() {}
push(val: number): void {
this.stack.push(val);
// 如果辅助栈为空,或者新值比辅助栈栈顶还小,就压入新值
// 否则,重复压入当前的最小值,保证两个栈高度一致
if (this.minStack.length === 0 || val <= this.getMin()) {
this.minStack.push(val);
} else {
this.minStack.push(this.getMin());
}
}
pop(): void {
this.stack.pop();
this.minStack.pop();
}
top(): number {
return this.stack[this.stack.length - 1];
}
getMin(): number {
return this.minStack[this.minStack.length - 1];
}
}