From 5f1ed686f111dfb154c5be7367390894a8845109 Mon Sep 17 00:00:00 2001 From: ktony Date: Sun, 27 Oct 2024 21:20:21 -0400 Subject: [PATCH 1/5] Same Tree --- same-tree/TonyKim9401.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 same-tree/TonyKim9401.java diff --git a/same-tree/TonyKim9401.java b/same-tree/TonyKim9401.java new file mode 100644 index 000000000..7f08a302a --- /dev/null +++ b/same-tree/TonyKim9401.java @@ -0,0 +1,17 @@ +// TC: O(n) +// retreive all given nodes +// SC: O(1) +// doesn't require additional space +class Solution { + public boolean isSameTree(TreeNode p, TreeNode q) { + if (p == null || q == null) { + if (p == null && q == null) return true; + return false; + } + + if (p.val != q.val) return false; + + return isSameTree(p.left, q.left) && + isSameTree(p.right, q.right); + } +} From 612595af9dade33463913bf82a92021e0942c425 Mon Sep 17 00:00:00 2001 From: ktony Date: Tue, 29 Oct 2024 14:39:31 -0400 Subject: [PATCH 2/5] Remove Nth Node From End Of List --- .../TonyKim9401.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 remove-nth-node-from-end-of-list/TonyKim9401.java diff --git a/remove-nth-node-from-end-of-list/TonyKim9401.java b/remove-nth-node-from-end-of-list/TonyKim9401.java new file mode 100644 index 000000000..7f253cfbe --- /dev/null +++ b/remove-nth-node-from-end-of-list/TonyKim9401.java @@ -0,0 +1,21 @@ +// TC: O(n) +// Visit all elements in the worst case +// SC: O(1) +// Keep using ready assigned variables only +class Solution { + public ListNode removeNthFromEnd(ListNode head, int n) { + ListNode output = new ListNode(0, head); + ListNode dummy = output; + + for (int i = 0; i < n; i++) head = head.next; + + while (head != null) { + head = head.next; + dummy = dummy.next; + } + + dummy.next = dummy.next.next; + + return output.next; + } +} \ No newline at end of file From 79fbf03bdfa167b6aea2589a6b8f3f3497ada14d Mon Sep 17 00:00:00 2001 From: ktony Date: Tue, 29 Oct 2024 14:40:52 -0400 Subject: [PATCH 3/5] Remove Nth Node From End Of List --- remove-nth-node-from-end-of-list/TonyKim9401.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/remove-nth-node-from-end-of-list/TonyKim9401.java b/remove-nth-node-from-end-of-list/TonyKim9401.java index 7f253cfbe..7ad6a852f 100644 --- a/remove-nth-node-from-end-of-list/TonyKim9401.java +++ b/remove-nth-node-from-end-of-list/TonyKim9401.java @@ -18,4 +18,4 @@ public ListNode removeNthFromEnd(ListNode head, int n) { return output.next; } -} \ No newline at end of file +} From a14bddf42f4655cacd56708ac68dd5e3f816af45 Mon Sep 17 00:00:00 2001 From: ktony Date: Wed, 30 Oct 2024 14:27:44 -0400 Subject: [PATCH 4/5] Merge Intervals --- merge-intervals/TonyKim9401.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 merge-intervals/TonyKim9401.java diff --git a/merge-intervals/TonyKim9401.java b/merge-intervals/TonyKim9401.java new file mode 100644 index 000000000..57be7590b --- /dev/null +++ b/merge-intervals/TonyKim9401.java @@ -0,0 +1,30 @@ +// TC: O(n log n) +// It takes n log n to sort array, visit all elements in O(n) time, total O(n log n) +// SC: O(n) +// Needs max O(n) space to save intervals +class Solution { + public int[][] merge(int[][] intervals) { + int n = intervals.length; + if (n == 1) return intervals; + + Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0])); + List output = new ArrayList<>(); + output.add(intervals[0]); + + int[] currentInterval = intervals[0]; + + for (int[] interval : intervals) { + int currentEnd = currentInterval[1]; + int nextStart = interval[0]; + int nextEnd = interval[1]; + if (currentEnd >= nextStart) { + currentInterval[1] = Math.max(currentEnd, nextEnd); + } else { + currentInterval = interval; + output.add(currentInterval); + } + } + + return output.toArray(new int[output.size()][]); + } +} From eda7ce0439d0d9c54da35f9958d449a32254736a Mon Sep 17 00:00:00 2001 From: ktony Date: Fri, 1 Nov 2024 01:45:05 -0400 Subject: [PATCH 5/5] Number Of Connected Components In An Undirected Graph --- .../TonyKim9401.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 number-of-connected-components-in-an-undirected-graph/TonyKim9401.java diff --git a/number-of-connected-components-in-an-undirected-graph/TonyKim9401.java b/number-of-connected-components-in-an-undirected-graph/TonyKim9401.java new file mode 100644 index 000000000..ea9fdfb1f --- /dev/null +++ b/number-of-connected-components-in-an-undirected-graph/TonyKim9401.java @@ -0,0 +1,34 @@ +// TC: O(n + m) +// n = the number of nodes, m = the number of edges +// SC: O(n + m) +// n, m are the each size of the 2 demension array 'edges' +public class Solution { + public int countComponents(int n, int[][] edges) { + List> graph = new ArrayList<>(); + + for (int i = 0; i < n; i++) graph.add(new ArrayList<>()); + + for (int[] edge : edges) { + graph.get(edge[0]).add(edge[1]); + graph.get(edge[1]).add(edge[0]); + } + + boolean[] visit = new boolean[n]; + int count = 0; + + for (int i = 0; i < n; i++) { + if (!visit[i]) { + count += 1; + dfs(i, graph, visit); + } + } + return count; + } + + private void dfs(int node, List> graph, boolean[] visit) { + visit[node] = true; + for (int neighbor : graph.get(node)) { + if (!visit[neighbor]) dfs(neighbor, graph, visit); + } + } +}