定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
提示:
二、思路讲解各函数的调用总次数不超过 20000 次
Java的栈中,push()和pop()的时间复杂度都为o(1),关键在于,如何实现时间复杂度为o(1)的遍历栈的方法。
这就需要用到辅助栈minStack,该栈的顶部元素即为数据栈中的最小值。当push进一个元素x之后,我们将该元素与minStack栈顶元素比较,若小于栈顶元素,即将栈顶元素进行替换为x。如果数据栈为空,即将x作为最小值。
三、Java代码实现class MinStack { Stack四、时间复杂度分析stack; Stack minStack; public MinStack() { stack = new Stack (); //数据栈 minStack = new Stack (); //最小值栈 } public void push(int x) { //如果数据栈为空,即将push进来的值最为最小值。 if(stack.isEmpty()) { stack.push(x); minStack.push(x); } else { stack.push(x); //将该元素与minStack栈顶元素比较,若小于栈顶元素,即将栈顶元素进行替换为x if(x < minStack.peek()) { minStack.push(x); } else { minStack.push(minStack.peek()); } } } public void pop() { stack.pop(); minStack.pop(); } public int top() { return stack.peek(); } public int min() { return minStack.peek(); } }
均为o(1)
执行用时:17 ms, 在所有 Java 提交中击败了93.33%的用户
内存消耗:40.2 MB, 在所有 Java 提交中击败了57.66%的用户
五、其他代码实现从力扣上偷的其他代码的实现,以供参考。
1、Pythonclass MinStack: def __init__(self): """ initialize your data structure here. """ self.stack = [] self.minv = float('inf') def push(self, x: int) -> None: if not self.stack: self.stack.append(0) self.minv = x else: self.stack.append(x-self.minv) self.minv = min(self.minv,x) def pop(self) -> None: pop = self.stack.pop() if pop < 0:self.minv = self.minv - pop def top(self) -> int: top = self.stack[-1] return self.minv + top if top >= 0 else self.minv def min(self) -> int: return self.minv2、Javascript
const MinStack = function () { this.stack = []; }; MinStack.prototype.push = function (x) { this.stack.push({ val: x, min: this.stack.length ? Math.min(x, this.min()) : x, }); }; MinStack.prototype.pop = function () { this.stack.pop(); }; MinStack.prototype.top = function () { return this.stack[this.stack.length - 1].val; }; MinStack.prototype.min = function () { return this.stack[this.stack.length - 1].min; };
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)