定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3); minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); -->返回 -2.
// 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
class MinStack {
constructor() {
this.count1 = 0
this.data1 = []
this.count2 = 0
this.data2 = []
}
push(item) {
this.data1[this.count1] = item
this.count1 ++
if(this.count2 === 0 || item <= this.min()) {
this.data2[this.count2] = item
this.count2 ++
}
}
min() {
return this.data2[this.count2 - 1]
}
top() {
return this.data1[this.count1 - 1]
}
pop() {
// 先进行data2的检测
if(this.top() === this.min()) {
// 如果data1 的栈顶值 === data2 的栈顶值
delete this.data2[--this.count2]
}
// data1 出栈
delete this.data1[--this.count1]
}
}
js 内置方法实现
class MinStack {
constructor() {
this.stack = []
}
push(item) {
this.stack.push(item)
}
top() {
return this.stack[this.stack.length -1]
}
// 最小值
min() {
return Math.min.apply(null, this.stack)
}
pop() {
return this.stack.pop()
}
}