From ec2ac767ee10c483291a6a45ae07f309de63ab2a Mon Sep 17 00:00:00 2001 From: chjung99 Date: Sun, 11 Jan 2026 14:34:48 +0900 Subject: [PATCH 1/5] clone-graph --- clone-graph/chjung99.java | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 clone-graph/chjung99.java diff --git a/clone-graph/chjung99.java b/clone-graph/chjung99.java new file mode 100644 index 0000000000..b0466b12fc --- /dev/null +++ b/clone-graph/chjung99.java @@ -0,0 +1,49 @@ +/* +// Definition for a Node. +class Node { + public int val; + public List neighbors; + public Node() { + val = 0; + neighbors = new ArrayList(); + } + public Node(int _val) { + val = _val; + neighbors = new ArrayList(); + } + public Node(int _val, ArrayList _neighbors) { + val = _val; + neighbors = _neighbors; + } +} +*/ + +class Solution { + public Node cloneGraph(Node node) { + if (node == null) return node; + return deepCopy(node); + } + + public Node deepCopy(Node node) { + Deque deque = new ArrayDeque<>(); + Node root = new Node(node.val, new ArrayList<>()); + Map visit = new HashMap<>(); + + visit.put(1, root); + deque.add(node); + + while (!deque.isEmpty()) { + Node cur = deque.poll(); + for (Node next: cur.neighbors) { + if (!visit.containsKey(next.val)){ + visit.put(next.val, new Node(next.val, new ArrayList<>())); + deque.add(next); + } + visit.get(cur.val).neighbors.add(visit.get(next.val)); + } + } + return root; + } +} + + From c78a14d861a3d1e3743c4a5e8ffcc7f93ade9253 Mon Sep 17 00:00:00 2001 From: chjung99 Date: Sun, 11 Jan 2026 14:35:00 +0900 Subject: [PATCH 2/5] find-minimum-in-rotated-sorted-array --- .../chjung99.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 find-minimum-in-rotated-sorted-array/chjung99.java diff --git a/find-minimum-in-rotated-sorted-array/chjung99.java b/find-minimum-in-rotated-sorted-array/chjung99.java new file mode 100644 index 0000000000..d112f95a92 --- /dev/null +++ b/find-minimum-in-rotated-sorted-array/chjung99.java @@ -0,0 +1,23 @@ +class Solution { + public int findMin(int[] nums) { + int left = 0; + int right = nums.length - 1; + int mid = (left + right) / 2; + while (left + 1 < right){ + mid = (left + right) / 2; + if (nums[mid] > nums[right]) { + left = mid; + } + if (nums[mid] < nums[right]) { + right = mid; + } + } + mid = (left + right) / 2; + if (nums[mid] > nums[right]) return nums[right]; + else { + return nums[mid]; + } + } +} + + From 610367c8d34814cc729c78c9bc8200978357b86b Mon Sep 17 00:00:00 2001 From: chjung99 Date: Sun, 11 Jan 2026 14:35:13 +0900 Subject: [PATCH 3/5] maximum-product-subarray --- maximum-product-subarray/chjung99.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 maximum-product-subarray/chjung99.java diff --git a/maximum-product-subarray/chjung99.java b/maximum-product-subarray/chjung99.java new file mode 100644 index 0000000000..bada05ba46 --- /dev/null +++ b/maximum-product-subarray/chjung99.java @@ -0,0 +1,24 @@ +class Solution { + public int maxProduct(int[] nums) { + int n = nums.length; + int[] dpMax = new int[n]; + int[] dpMin = new int[n]; + + dpMax[0] = nums[0]; + dpMin[0] = nums[0]; + for (int i = 1; i < n; i++){ + dpMax[i] = Math.max(Math.max(dpMax[i-1]*nums[i], nums[i]), dpMin[i-1]*nums[i]); + dpMin[i] = Math.min(Math.min(dpMin[i-1]*nums[i], nums[i]), dpMax[i-1]*nums[i]); + } + return findMax(dpMax); + } + + public int findMax(int[] dp) { + int answer = dp[0]; + for (int i = 0; i < dp.length; i++) { + answer = Math.max(dp[i], answer); + } + return answer; + } +} + From 59284b564064f18300ae99af57a6a0dae5724454 Mon Sep 17 00:00:00 2001 From: chjung99 Date: Sun, 11 Jan 2026 14:35:28 +0900 Subject: [PATCH 4/5] reorder-list --- reorder-list/chjung99.java | 57 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 reorder-list/chjung99.java diff --git a/reorder-list/chjung99.java b/reorder-list/chjung99.java new file mode 100644 index 0000000000..c436bace86 --- /dev/null +++ b/reorder-list/chjung99.java @@ -0,0 +1,57 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public void reorderList(ListNode head) { + Map order = new HashMap<>(); + ListNode start = head; + int n = 0; + + while (start != null) { + order.put(n, start); + start = start.next; + n++; + } + + ListNode cur = head; + List newOrder = generateOrder(n); + + for (int i = 0; i < n; i++) { + int idx = newOrder.get(i); + cur = order.get(idx); + if (i + 1 < n) { + cur.next = order.get(newOrder.get(i+1)); + } else { + cur.next = null; + } + cur = cur.next; + } + } + public List generateOrder(int n) { + List reorder = new ArrayList<>(); + int[] asc = new int[n]; + int[] desc = new int[n]; + + for (int i = 0; i < n; i++) { + asc[i] = i; + desc[i] = n - 1 - i; + } + + for (int i = 0; i< n; i++) { + if (i % 2 == 0) { + reorder.add(asc[i/2]); + } else { + reorder.add(desc[i/2]); + } + } + return reorder; + } +} + From d815b5c6143cd14aa40f44966e02166e44349f63 Mon Sep 17 00:00:00 2001 From: chjung99 Date: Sun, 11 Jan 2026 14:35:40 +0900 Subject: [PATCH 5/5] word-break --- word-break/chjung99.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 word-break/chjung99.java diff --git a/word-break/chjung99.java b/word-break/chjung99.java new file mode 100644 index 0000000000..eb48b15faa --- /dev/null +++ b/word-break/chjung99.java @@ -0,0 +1,19 @@ +class Solution { + public boolean wordBreak(String s, List wordDict) { + Set wordSet = new HashSet<>(wordDict); + int n = s.length(); + boolean[] dp = new boolean[n]; + for (int i = 0; i < n; i++) { + dp[i] = wordSet.contains(s.substring(0, i+1)); + for (int j = 0; j < i; j++) { + if (dp[j] && wordSet.contains(s.substring(j+1, i+1))){ + dp[i] = true; + } + } + } + + return dp[n-1]; + } +} + +