题干

我的解答
class MinStack {
stack:Array<number>
constructor() {
this.stack = [];
}
push(x: number): void {
this.stack.push(x);
}
pop(): void {
this.stack.pop();
}
top(): number {
if(this.stack.length==0)
return
return this.stack[this.stack.length-1];
}
min(): number {
if(this.stack.length==0)
return
let Min:number = this.stack[0];
for(let a of this.stack){
if(Min>a){
Min=a;
}
}
return Min
}
}
结果

示例代码
class MinStack {
stk: number[]
help: number[]
constructor() {
this.stk = []
this.help = [Infinity]
}
push(x: number): void {
this.stk.push(x)
const e = Math.min(this.help[this.help.length-1], x)
this.help.push(e)
}
pop(): void {
this.stk.pop()
this.help.pop()
}
top(): number {
return this.stk[this.stk.length-1]
}
min(): number {
return this.help[this.help.length-1]
}
}
分析
- 使用了两个数组,一个是原始的,另一个是用于min的数组,在push的时候要判断下只保留最小的,这样的话两个数组如果长度一致,min数组的最后一位就是原始数组最小的了