Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
class MinStack { private Stack<Integer> stackData = new Stack<Integer>(); private Stack<Integer> stackMin = new Stack<Integer>(); public void push(int x) { if (stackMin.isEmpty()) { stackMin.push(x); } else if (x <= getMin()) { stackMin.push(x); } stackData.push(x); } public void pop() { if (stackData.isEmpty()) { return; } Integer pop = stackData.pop(); if (pop == getMin()) { stackMin.pop(); } } public int top() { return stackData.peek(); } public int getMin() { if (stackMin.isEmpty()) { return 0; } return stackMin.peek(); } }
相关推荐
如果`minStack`为空或x小于`minStack`的栈顶元素,那么`x`也应成为`minStack`的栈顶元素。 3. 执行`pop()`时,两个栈都弹出顶部元素。 4. `top()`操作只需返回`mainStack`的栈顶元素。 5. `getMin()`操作则直接返回`...
标题中的“minstack”指的是一个特别设计的编程学习栈,旨在提供一个轻量级的环境,用于初学者实践OS(操作系统)语言应用的开发。它强调了“调试、开发、发布合一”的选型,这意味着该栈包含了从编写代码、调试到...
if (minStack.isEmpty() || x <= minStack.peek()) { minStack.push(x); } } public void pop() { if (mainStack.pop().equals(minStack.peek())) { minStack.pop(); } } public int top() { return ...
if (minStack.isEmpty() || x <= minStack.peek()) { minStack.push(x); } } public void pop() { if (!mainStack.isEmpty()) { int popped = mainStack.pop(); if (popped.equals(minStack.peek())) { ...
if (empty($this->minStack) || $x ($this->minStack)) { $this->minStack[] = $x; } } // 出栈操作 public function pop() { if (!empty($this->stack)) { if (end($this->stack) === end($this->minStack...
- `pop`操作时,检查被弹出的元素是否等于`minStack`栈顶元素,如果是,则`minStack`也弹出一个元素。 - `min`操作直接返回`minStack`的栈顶元素即可。 **代码示例**: ```cpp class MinStack { public: void push...
void MinStackPush(MinStack& stack, int d) { if (stack.topData == stack.size) error("out of stack space."); stack.data[stack.topData].data = d; stack.data[stack.topData].min = (stack.topData == 0 ? ...
1. **入栈操作**:当有新元素加入时,同时比较该元素与 `minStack` 的栈顶元素,取较小者入栈到 `minStack`。 2. **出栈操作**:出栈时同时弹出 `minStack` 的栈顶元素。 3. **获取最小值**:`minStack` 的栈顶元素...
这段代码实现了一个特殊的栈`MinStack`,在每次压栈时都会记录到目前为止的最小值,这样在任何时候都能够以O(1)的时间复杂度获取到栈中的最小元素。 ### 总结 以上两个题目是微软面试中较为典型的数据结构与算法...
void MinStackPush(MinStack *stack, int d) { if (stack->top == stack->size) error("Out of stack space."); MinStackElement *p = &(stack->data[stack->top]); p->data = d; p->min = (stack->top == 0 ? d...
if (minStack.empty() || x <= minStack.top()) { minStack.push(x); } } void pop() { if (dataStack.top() == minStack.top()) { minStack.pop(); } dataStack.pop(); } int top() { return data...
if (minStack.isEmpty() || x <= minStack.peek()) { minStack.push(x); } mainStack.push(x); } public int pop() { int x = mainStack.pop(); if (x == minStack.peek()) { minStack.pop(); } return ...
- 每当向 `dataStack` 中压入新元素时,同时比较该元素与 `minStack` 顶部的元素,取较小者压入 `minStack`。 - 当从 `dataStack` 中弹出元素时,也需要从 `minStack` 中弹出相应的元素。 - **代码实现**(示例)...
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.min(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.min(); --> 返回 -...
其次,如果推送的元素低于minStack的top元素,则将其推送到minStack,否则我们将克隆minStack的top元素。 当我们弹出一个元素时,我们会同时从两个堆栈中弹出它,以使两个堆栈保持同步。 这样,我们总是可以通过弹...
void MinStackPush(MinStack& stack, int value) { if (stack.top == stack.size - 1) { // 栈满 return; } stack.top++; MinStackElement& elem = stack.data[stack.top]; if (stack.top == 0 || value < ...
- 每次push新元素时,如果新元素小于等于minStack栈顶元素,则将新元素同时push到dataStack和minStack中; - 否则,只将新元素push到dataStack中。 3. **实现pop操作** - pop时,检查dataStack栈顶元素是否等于...
- 每次`push`时,如果新元素小于等于`minStack`的顶部元素,则将新元素同时压入`dataStack`和`minStack`。 - `pop`时,如果弹出元素等于`minStack`的顶部元素,则`minStack`也弹出一个元素。 - `min`函数直接返回...