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
- 注释:
- -1e7 <= x <= 1e7
- 操作次数不会超过 10000。
- 当栈为空的时候不会出现后四个操作。
- 解法一
/**
* 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%的用户