描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数,并且调用 min函数、push函数 及 pop函数 的时间复杂度都是 O(1)
push(value):将value压入栈中
pop():弹出栈顶元素
top():获取栈顶元素
min():获取栈中最小元素
示例:
输入: [“PSH-1”,“PSH2”,“MIN”,“TOP”,“POP”,“PSH1”,“TOP”,“MIN”]
输出: -1,2,1,-1
解析:
"PSH-1"表示将-1压入栈中,栈中元素为-1
"PSH2"表示将2压入栈中,栈中元素为2,-1
“MIN”表示获取此时栈中最小元素==> 返回-1
"TOP"表示获取栈顶元素==>返回2
"POP"表示弹出栈顶元素,弹出2,栈中元素为-1
"PSH-1"表示将1压入栈中,栈中元素为1,-1
"TOP"表示获取栈顶元素==>返回1
“MIN”表示获取此时栈中最小元素==>返回-1
//牛客
let stack=[];
function push(node){
stack.push(node);
}
function pop(){
stack.pop();
}
function top(){
return stack[stack.length-1];
}
function min(){
return Math.min(...stack);
}
//力扣
/**
* initialize your data structure here.
*/
var MinStack = function() {
this.stack = [];
};
/**
* @param {number} x
* @return {void}
*/
MinStack.prototype.push = function(x) {
this.stack.push(x);
};
/**
* @return {void}
*/
MinStack.prototype.pop = function() {
this.stack.pop();
};
/**
* @return {number}
*/
MinStack.prototype.top = function() {
return this.stack[this.stack.length-1];
};
/**
* @return {number}
*/
MinStack.prototype.min = function() {
return Math.min(...this.stack);
};
/**
* 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.min()
*/
总结:本题所用知识点
1. Array对象的push()方法
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
arrayObject.push(newelement1,newelement2,....,newelementX)
参数说明:
newelement1:必需。要添加到数组的第一个元素。
newelement2:可选。要添加到数组的第二个元素。
newelementX:可选。可添加多个元素。
返回值:
把指定的值添加到数组后的新长度。
说明:
push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。
注意:该方法会改变数组的长度。
2. Array对象的pop()方法
pop() 方法用于删除并返回数组的最后一个元素。
arrayObject.pop()
返回值:
arrayObject 的最后一个元素。
说明:
pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。
3. Math 对象min()方法
Math.min() 返回零个或更多个数值的最小值。
Math.min([value1[,value2, ...]])
参数说明:value1, value2, …一组数值
返回值:给定数值中最小的数。如果任一参数不能转换为数值,则返回NaN。
重点!!!求取数组最小值
方法1:使用apply。apply传入的是一个数组。
var arr = [22,13,6,55,30];
var max = Math.max.apply(null, arr);
var min = Math.min.apply(null, arr);
console.log(max, min) // 55,6
方法2:使用ES6扩展运算符
var arr = [22,13,6,55,30];
console.log(Math.max(...arr)); // 55
本文介绍了一种特殊栈的设计与实现方法,该栈能够在O(1)时间复杂度内完成push、pop、top操作的同时,还能获取栈中最小元素。文章通过具体示例展示了如何利用JavaScript的Array对象实现这一功能。
486

被折叠的 条评论
为什么被折叠?



