ext-1.栈的最小值
/**
* 请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。
* initialize your data structure here.
*/
/**
* 解题思路:
* 1.定义两个栈,一个栈用于存储数据,另一个栈用于存储每次数据进栈时栈的最小值.
* 2.每次数据进栈时,将此数据和最小值栈的栈顶元素比较,将二者比较的较小值再次存入最小值栈.
* 3.数据栈出栈,最小值栈也出栈。
* 4.这样最小值栈的栈顶永远是当前栈的最小值
*/
var MinStack = function() {
this.dataStack = [] // 用于储存数据
this.minStack = [] // 用于储存最小值,注意这两个stack的长度是一样的
};
/**
* @param {number} x
* @return {void}
*/
MinStack.prototype.push = function(x) {
this.dataStack.push(x)
// 每次进栈数据都与之前的min比较
let min = this.getMin()
if(x < min || this.minStack.length === 0) {
this.minStack.push(x)
} else {
this.minStack.push(min) // 注意理解这一步
}
};
/**
* @return {void}
*/
MinStack.prototype.pop = function() {
this.minStack.pop() // 注意理解这一步
return this.dataStack.pop()
};
/**
* @return {number}
*/
MinStack.prototype.top = function() {
return this.dataStack[this.dataStack.length - 1]
};
/**
* @return {number}
*/
MinStack.prototype.getMin = function() {
let min = this.minStack[this.minStack.length - 1]
return min
};
/**
* Your MinStack object will be instantiated and called as such:
* var obj = new MinStack()
* obj.push(x)
* obj.pop()
* var param_3 = obj.top()
* var param_4 = obj.getMin()
*/