JavaScript 栈:包含min函数的栈【思路与知识点总结】

本文介绍了一种特殊栈的设计与实现方法,该栈能够在O(1)时间复杂度内完成push、pop、top操作的同时,还能获取栈中最小元素。文章通过具体示例展示了如何利用JavaScript的Array对象实现这一功能。

描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值