diff --git a/find-median-from-data-stream/minji-go.java b/find-median-from-data-stream/minji-go.java
new file mode 100644
index 000000000..885a6586e
--- /dev/null
+++ b/find-median-from-data-stream/minji-go.java
@@ -0,0 +1,45 @@
+/**
+ * week13-4. find-median-from-data-stream
+ *
Description: Implement the MedianFinder class
+ * Topics: Two Pointers, Design, Sorting, Heap (Priority Queue), Data Stream
+ * Time Complexity: O(logN), Runtime 99ms
+ * Space Complexity: O(N), Memory 63.68MB
+ */
+
+class MedianFinder {
+ PriorityQueue head;
+ PriorityQueue tail;
+
+ public MedianFinder() {
+ head = new PriorityQueue<>(Comparator.reverseOrder());
+ tail = new PriorityQueue<>();
+ }
+
+ public void addNum(int num) {
+ if(head.isEmpty() || num <= head.peek()) {
+ head.add(num);
+ } else {
+ tail.add(num);
+ }
+
+ if (head.size() > tail.size() + 1) {
+ tail.add(head.poll());
+ } else if (head.size() < tail.size()) {
+ head.add(tail.poll());
+ }
+ }
+
+ public double findMedian() {
+ if(head.size() == tail.size()){
+ return ((double)head.peek() + tail.peek()) / 2;
+ }
+ return head.peek();
+ }
+}
+
+/**
+ * Your MedianFinder object will be instantiated and called as such:
+ * MedianFinder obj = new MedianFinder();
+ * obj.addNum(num);
+ * double param_2 = obj.findMedian();
+ */
diff --git a/insert-interval/minji-go.java b/insert-interval/minji-go.java
new file mode 100644
index 000000000..85ae32a55
--- /dev/null
+++ b/insert-interval/minji-go.java
@@ -0,0 +1,30 @@
+/**
+ * week13-3. insert-interval
+ * Description: Return intervals after the insertion of 'new interval' given an array of non-overlapping intervals
+ * Topics: Array
+ * Time Complexity: O(N), Runtime 1ms
+ * Space Complexity: O(N), Memory 45.02MB
+ */
+class Solution {
+ public int[][] insert(int[][] intervals, int[] newInterval) {
+ List answer = new ArrayList<>();
+
+ int i = 0;
+ while (i < intervals.length && intervals[i][1] < newInterval[0]) {
+ answer.add(intervals[i++]);
+ }
+
+ while (i < intervals.length && newInterval[1] >= intervals[i][0]) {
+ newInterval[0] = Math.min(intervals[i][0], newInterval[0]);
+ newInterval[1] = Math.max(intervals[i][1], newInterval[1]);
+ i++;
+ }
+ answer.add(newInterval);
+
+ while (i < intervals.length) {
+ answer.add(intervals[i++]);
+ }
+
+ return answer.toArray(new int[answer.size()][]);
+ }
+}
diff --git a/kth-smallest-element-in-a-bst/minji-go.java b/kth-smallest-element-in-a-bst/minji-go.java
new file mode 100644
index 000000000..ca9b73d60
--- /dev/null
+++ b/kth-smallest-element-in-a-bst/minji-go.java
@@ -0,0 +1,31 @@
+/**
+ * week13-3. kth-smallest-element-in-a-bst
+ * Description: Given the root of a binary search tree, and an integer k, return the kth smallest value
+ * Topics: Tree, Depth-First Search, Binary Search Tree, Binary Tree
+ * Time Complexity: O(N), Runtime 0ms
+ * Space Complexity: O(H), Memory 44.5MB
+ * Note: If the BST is modified often (with frequent insertions or deletions), consider using an Augmented BST, Segment Tree, or TreeMap with additional metadata to efficiently support dynamic updates and k-th smallest queries in logarithmic time.
+ */
+class Solution {
+ public int kthSmallest(TreeNode root, int k) {
+ return inorder(root, new AtomicInteger(k));
+ }
+
+ public Integer inorder(TreeNode node, AtomicInteger k) {
+ if (node == null) {
+ return null;
+ }
+
+ Integer value = inorder(node.left, k);
+ if (value != null) {
+ return value;
+ }
+
+ if (k.decrementAndGet() == 0) {
+ return node.val;
+ }
+
+ return inorder(node.right, k);
+ }
+
+}
diff --git a/lowest-common-ancestor-of-a-binary-search-tree/minji-go.java b/lowest-common-ancestor-of-a-binary-search-tree/minji-go.java
new file mode 100644
index 000000000..515c522af
--- /dev/null
+++ b/lowest-common-ancestor-of-a-binary-search-tree/minji-go.java
@@ -0,0 +1,24 @@
+/**
+ * week13-2. lowest-common-ancestor-of-a-binary-search-tree
+ * Description: find the lowest common ancestor (LCA) node of two given nodes in the BST.
+ * Topics: Tree, Depth-First Search, Binary Search Tree, Binary Tree
+ * Time Complexity: O(H), Runtime 5ms
+ * Space Complexity: O(1), Memory 44.91MB
+ */
+
+class Solution {
+ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
+ TreeNode node = root;
+ while (node != null) {
+ if (p.val < node.val && q.val < node.val) {
+ node = node.left;
+ } else if (p.val > node.val && q.val > node.val) {
+ node = node.right;
+ } else {
+ return node;
+ }
+ }
+
+ throw new IllegalArgumentException();
+ }
+}