diff --git a/apps/docs/content/(array)/150-evaluate-reverse-polish-notation.mdx b/apps/docs/content/(array)/150-evaluate-reverse-polish-notation.mdx
new file mode 100644
index 0000000..04a5134
--- /dev/null
+++ b/apps/docs/content/(array)/150-evaluate-reverse-polish-notation.mdx
@@ -0,0 +1,55 @@
+---
+title: '150. Evaluate Reverse Polish Notation'
+description: You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation
+sidebar:
+ label: 'Evaluate Reverse Polish Notation'
+ badge: 'Medium'
+---
+
+Stack
+
+### Example 1:
+- Input: `tokens = ["2","1","+","3","*"]`
+- Output: `9`
+- Explanation: `((2 + 1`) * `3`) = `9`
+
+### Example 2:
+- Input: `tokens = ["4","13","5","/","+"]`
+- Output: `6`
+- Explanation: `(4 + (13 / 5`)) = `6`
+
+### Example 3:
+- Input: `tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]`
+- Output: `22`
+- Explanation: `((10 * (6 / ((9 + 3`) * `-11`))) + `17`) + `5 = ((10 * (6 / (12 * -11`))) + `17`) + `5 = ((10 * (6 / -132`)) + `17`) + `5 = ((10 * 0`) + `17`) + `5 = (0 + 17`) + `5 = 17 + 5 = 22`
+
+### Constraints:
+
+- `1 <= tokens.length <= 10^4`
+- `tokens[i]` is either an operator: "+", "-", "*", or "/", or an integer in the range [-200, 200].
+
+## Solution
+
+```py
+class Solution:
+ def evalRPN(self, tokens: List[str]) -> int:
+ stack = []
+ operations = {
+ "+": lambda x, y: int(x + y),
+ "-": lambda x, y: int(x - y),
+ "*": lambda x, y: int(x * y),
+ "/": lambda x, y: int(x / y),
+ }
+
+ for c in tokens:
+ if c in operations:
+ y = stack.pop()
+ x = stack.pop()
+ calc_func = operations[c]
+ result = calc_func(x, y)
+ stack.append(result)
+ else:
+ stack.append(int(c))
+
+ return stack[0]
+```
diff --git a/apps/docs/content/(stack)/155-min-stack.mdx b/apps/docs/content/(stack)/155-min-stack.mdx
new file mode 100644
index 0000000..e284439
--- /dev/null
+++ b/apps/docs/content/(stack)/155-min-stack.mdx
@@ -0,0 +1,56 @@
+---
+title: '155. Min Stack'
+description: Design a stack that supports push, pop, top, and retrieving the minimum element in constant time
+sidebar:
+ label: 'Min Stack'
+ badge: 'Medium'
+---
+
+Stack
+
+::::warning
+You must implement a solution with O(1) time complexity for each function.
+::::
+
+### Example 1:
+- Input: ``
+- Output: ``
+- Explanation: 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`
+
+### 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.
+
+## Solution
+
+```py
+class MinStack:
+ def __init__(self):
+ self.stack = []
+ self.minStack = []
+
+ def push(self, value: int) -> None:
+ self.stack.append(value)
+ value = min(value, self.minStack[-1] if self.minStack else value)
+ self.minStack.append(value)
+
+ def pop(self) -> None:
+ self.stack.pop()
+ self.minStack.pop()
+
+ def top(self) -> int:
+ return self.stack[-1]
+
+ def getMin(self) -> int:
+ return self.minStack[-1]
+
+
+# Your MinStack object will be instantiated and called as such:
+# obj = MinStack()
+# obj.push(value)
+# obj.pop()
+# param_3 = obj.top()
+# param_4 = obj.getMin()
+```