leetcode 算法题716 (简单186) 最大栈

leetcode 算法题716 (简单186) 最大栈

  • 题目介绍
设计一个最大栈,支持 push、pop、top、peekMax 和 popMax 操作。
  push(x) -- 将元素 x 压入栈中。
  pop() -- 移除栈顶元素并返回这个值。
  top() -- 返回栈顶元素。
  peekMax() -- 返回栈中最大元素。
  popMax() -- 返回栈中最大的元素,并将其删除。如果有多个最大元素,只要删除最靠近栈顶的那个。
  • 示例

MaxStack stack = new MaxStack();
stack.push(5);
stack.push(1);
stack.push(5);
stack.top(); -> 5
stack.popMax(); -> 5
stack.top(); -> 1
stack.peekMax(); -> 5
stack.pop(); -> 1
stack.top(); -> 5

  • 注释:
  1. -1e7 <= x <= 1e7
  2. 操作次数不会超过 10000。
  3. 当栈为空的时候不会出现后四个操作。
  • 解法一
/**
 * initialize your data structure here.
 */
var MaxStack = function() {
  this.list = [];
};

/** 
 * @param {number} x
 * @return {void}
 */
MaxStack.prototype.push = function(x) {
  this.list.push(x);
};

/**
 * @return {number}
 */
MaxStack.prototype.pop = function() {
  return this.list.pop();
};

/**
 * @return {number}
 */
MaxStack.prototype.top = function() {
  return this.list[this.list.length - 1];
};

/**
 * @return {number}
 */
MaxStack.prototype.peekMax = function() {
  return Math.max(...this.list);
};

/**
 * @return {number}
 */
MaxStack.prototype.popMax = function() {
  let max = this.peekMax();
  this.list.splice(this.list.lastIndexOf(max), 1)
  return max;
};

/** 
 * Your MaxStack object will be instantiated and called as such:
 * var obj = new MaxStack()
 * obj.push(x)
 * var param_2 = obj.pop()
 * var param_3 = obj.top()
 * var param_4 = obj.peekMax()
 * var param_5 = obj.popMax()
 */

执行用时 : 183 ms, 在所有 JavaScript 提交中击败了100.00%的用户

内存消耗 : 43.3 MB, 在所有 JavaScript 提交中击败了100.00%的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值