diff --git a/course-schedule.java b/course-schedule.java new file mode 100644 index 00000000..373fd9f0 --- /dev/null +++ b/course-schedule.java @@ -0,0 +1,52 @@ +//TC: O(V+E) +//SC: O(n) + +class Solution { + public boolean canFinish(int numCourses, int[][] prerequisites) { + HashMap> map = new HashMap<>(); // for dependency list + int[] indegrees = new int[numCourses]; //how many pre requistes are there + + for (int[] edge : prerequisites) { + int dep = edge[0]; + int in = edge[1]; + indegrees[dep]++; + if (!map.containsKey(in)) { + map.put(in, new ArrayList<>()); + } + + map.get(in).add(dep); + } + + Queue q = new LinkedList<>(); + int count = 0; + + for (int i = 0; i < numCourses; i++) { + if (indegrees[i] == 0) { + q.add(i); + count++; + if (count == numCourses) + return true; + } + } + + if (q.isEmpty()) + return false; + + while (!q.isEmpty()) { + int curr = q.poll(); + List babies = map.get(curr); + if (babies != null) { + for (int baby : babies) { + indegrees[baby]--; + if (indegrees[baby] == 0) { + q.add(baby); + count++; + if (count == numCourses) + return true; + } + } + } + } + return false; + } +} \ No newline at end of file diff --git a/level-order-traversal.java b/level-order-traversal.java new file mode 100644 index 00000000..2f92e3d4 --- /dev/null +++ b/level-order-traversal.java @@ -0,0 +1,51 @@ +//TC: O(n) +//SC: O(1) + +class Solution { + public List> levelOrder(TreeNode root) { + //DFS + List> result = new ArrayList<>(); + if (root == null) + return result; + dfs(root, 0, result); + return result; + } + private void dfs(TreeNode curr, int level, List> result){ + //base + if(curr == null) return; + + //logic + if(result.size() == level){ + result.add(new ArrayList<>()); + } + result.get(level).add(curr.val); + dfs(curr.left, level+1, result); + dfs(curr.right, level+1, result); + + } +} + +//BFS +/* List> result = new ArrayList<>(); +if (root == null) + return result; +Queue q = new LinkedList<>(); +q.add(root); +while (!q.isEmpty()) { + int size = q.size(); + List li = new ArrayList<>(); + for (int i = 0; i < size; i++) { + TreeNode curr = q.poll(); + li.add(curr.val); + if (curr.left != null) { + q.add(curr.left); + } + if (curr.right != null) { + q.add(curr.right); + } + } + result.add(li); +} +return result; +} +} */ \ No newline at end of file