2026-06-01 18:12:40 +08:00
|
|
|
#+ANKI_DECK: study_deck_02
|
2026-06-01 17:12:10 +08:00
|
|
|
* TODO 0155. Min Stack :medium:
|
2026-06-01 02:33:30 +08:00
|
|
|
:PROPERTIES:
|
2026-06-01 17:22:07 +08:00
|
|
|
:NEETCODE: [[file:../../roadmap.org::*0155. Min Stack][0155. Min Stack]]
|
2026-06-01 02:33:30 +08:00
|
|
|
:END:
|
|
|
|
|
|
2026-06-01 17:22:07 +08:00
|
|
|
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
|
|
|
|
|
|
|
|
|
|
Implement the ~MinStack~ class:
|
|
|
|
|
|
|
|
|
|
- ~MinStack()~ initializes the stack object.
|
|
|
|
|
|
|
|
|
|
- ~void push(int val)~ pushes the element ~val~ onto the stack.
|
|
|
|
|
|
|
|
|
|
- ~void pop()~ removes the element on the top of the stack.
|
|
|
|
|
|
|
|
|
|
- ~int top()~ gets the top element of the stack.
|
|
|
|
|
|
|
|
|
|
- ~int getMin()~ retrieves the minimum element in the stack.
|
|
|
|
|
|
|
|
|
|
You must implement a solution with ~O(1)~ time complexity for each function.
|
|
|
|
|
|
|
|
|
|
*Example 1:*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#+begin_src
|
|
|
|
|
Input
|
|
|
|
|
["MinStack","push","push","push","getMin","pop","top","getMin"]
|
|
|
|
|
[[],[-2],[0],[-3],[],[],[],[]]
|
|
|
|
|
|
|
|
|
|
Output
|
|
|
|
|
[null,null,null,null,-3,null,0,-2]
|
|
|
|
|
|
|
|
|
|
Explanation
|
|
|
|
|
MinStack minStack = new MinStack();
|
|
|
|
|
minStack.push(-2);
|
|
|
|
|
minStack.push(0);
|
|
|
|
|
minStack.push(-3);
|
|
|
|
|
minStack.getMin(); // return -3
|
|
|
|
|
minStack.pop();
|
|
|
|
|
minStack.top(); // return 0
|
|
|
|
|
minStack.getMin(); // return -2
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*Constraints:*
|
|
|
|
|
|
|
|
|
|
- ~-2^{31} <= val <= 2^{31} - 1~
|
|
|
|
|
|
|
|
|
|
- Methods ~pop~, ~top~ and ~getMin~ operations will always be called on *non-empty* stacks.
|
|
|
|
|
|
|
|
|
|
- At most ~3 * 10^{4}~ calls will be made to ~push~, ~pop~, ~top~, and ~getMin~.
|
|
|
|
|
|
2026-06-01 02:39:53 +08:00
|
|
|
** TODO Approach
|
|
|
|
|
Write your approach here.
|
|
|
|
|
|
|
|
|
|
** TODO Python
|
2026-06-05 22:32:49 +08:00
|
|
|
#+begin_src python :lc-problem 155 :lc-lang python3
|
2026-06-01 17:22:07 +08:00
|
|
|
class MinStack:
|
2026-06-01 02:39:53 +08:00
|
|
|
|
2026-06-01 17:22:07 +08:00
|
|
|
def __init__(self):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def push(self, val: int) -> None:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def pop(self) -> None:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def top(self) -> int:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getMin(self) -> int:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Your MinStack object will be instantiated and called as such:
|
|
|
|
|
# obj = MinStack()
|
|
|
|
|
# obj.push(val)
|
|
|
|
|
# obj.pop()
|
|
|
|
|
# param_3 = obj.top()
|
|
|
|
|
# param_4 = obj.getMin()
|
2026-06-01 02:39:53 +08:00
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** TODO C++
|
2026-06-05 22:32:49 +08:00
|
|
|
#+begin_src cpp :lc-problem 155
|
2026-06-01 17:22:07 +08:00
|
|
|
class MinStack {
|
|
|
|
|
public:
|
|
|
|
|
MinStack() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void push(int val) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void pop() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int top() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int getMin() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
2026-06-01 02:33:30 +08:00
|
|
|
|
2026-06-01 17:22:07 +08:00
|
|
|
/**
|
|
|
|
|
* Your MinStack object will be instantiated and called as such:
|
|
|
|
|
* MinStack* obj = new MinStack();
|
|
|
|
|
* obj->push(val);
|
|
|
|
|
* obj->pop();
|
|
|
|
|
* int param_3 = obj->top();
|
|
|
|
|
* int param_4 = obj->getMin();
|
|
|
|
|
*/
|
2026-06-01 02:33:30 +08:00
|
|
|
#+end_src
|