diff --git a/data/progress.txt b/data/progress.txt index ea4e21a5..c26a895b 100644 --- a/data/progress.txt +++ b/data/progress.txt @@ -1,4 +1,4 @@ -20240609: 236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo) +20240609: 236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo) 20240608: 503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77 20240607: 235(ok),236(again),496(ok),110(ok),1448(again!) 20240606: 206,143,138(again),141,needcode_tree,226,104,110(again!!!) diff --git a/data/to_review.txt b/data/to_review.txt index 6b5163d2..86eb8b75 100644 --- a/data/to_review.txt +++ b/data/to_review.txt @@ -1,4 +1,4 @@ -2024-08-03 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo)'] +2024-08-03 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo)'] 2024-08-02 -> ['503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77'] 2024-08-01 -> ['235(ok),236(again),496(ok),110(ok),1448(again!)'] 2024-07-31 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)'] @@ -18,7 +18,7 @@ 2024-07-16 -> ['62,572,57'] 2024-07-15 -> ['322,191,190'] 2024-07-14 -> ['73,200,70,323(again)'] -2024-07-13 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo)', '207,79,206,213,198'] +2024-07-13 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo)', '207,79,206,213,198'] 2024-07-12 -> ['503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '212(todo),211,338,208(again)'] 2024-07-11 -> ['235(ok),236(again),496(ok),110(ok),1448(again!)', '347,253(todo),91(todo),217'] 2024-07-10 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '226,98,253(todo)'] @@ -30,7 +30,7 @@ 2024-07-04 -> ['005,003(again)', '125'] 2024-07-02 -> ['11,647,261(again),133(again)'] 2024-07-01 -> ['143,15,268,141,139'] -2024-06-30 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo)', '21,20,19,271,269'] +2024-06-30 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo)', '21,20,19,271,269'] 2024-06-29 -> ['503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '417(again),33,153,152'] 2024-06-28 -> ['235(ok),236(again),496(ok),110(ok),1448(again!)', '424,297(todo),295(todo),39'] 2024-06-27 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '55,54(todo),53(again),435(again),49,48(todo),300(again)'] @@ -38,19 +38,19 @@ 2024-06-25 -> ['567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '62,572,57'] 2024-06-24 -> ['146,460,582(ok*),139(ok),322(todo)', '322,191,190'] 2024-06-23 -> ['127,742(again),133(again),207(ok*),261(ok)', '73,200,70,323(again)'] -2024-06-22 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo)', '128,261', '207,79,206,213,198'] +2024-06-22 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo)', '128,261', '207,79,206,213,198'] 2024-06-21 -> ['503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '005,003(again)', '212(todo),211,338,208(again)'] 2024-06-20 -> ['235(ok),236(again),496(ok),110(ok),1448(again!)', '347,253(todo),91(todo),217'] 2024-06-19 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '11,647,261(again),133(again)', '226,98,253(todo)'] 2024-06-18 -> ['150,22(again),739(again!!!),needcode_linkedlist', '143,15,268,141,139', '104,230,102,100'] -2024-06-17 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo)', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '21,20,19,271,269', '105,106'] +2024-06-17 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo)', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '21,20,19,271,269', '105,106'] 2024-06-16 -> ['503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '146,460,582(ok*),139(ok),322(todo)', '417(again),33,153,152', '242,235'] 2024-06-15 -> ['235(ok),236(again),496(ok),110(ok),1448(again!)', '127,742(again),133(again),207(ok*),261(ok)', '424,297(todo),295(todo),39', '371'] -2024-06-14 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo)', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '128,261', '55,54(todo),53(again),435(again),49,48(todo),300(again)', '121,252'] +2024-06-14 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo)', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '128,261', '55,54(todo),53(again),435(again),49,48(todo),300(again)', '121,252'] 2024-06-13 -> ['503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '150,22(again),739(again!!!),needcode_linkedlist', '005,003(again)', '56', '125'] -2024-06-12 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo)', '235(ok),236(again),496(ok),110(ok),1448(again!)', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '62,572,57'] -2024-06-11 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo)', '503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '146,460,582(ok*),139(ok),322(todo)', '11,647,261(again),133(again)', '322,191,190'] -2024-06-10 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo)', '503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '235(ok),236(again),496(ok),110(ok),1448(again!)', '150,22(again),739(again!!!),needcode_linkedlist', '127,742(again),133(again),207(ok*),261(ok)', '143,15,268,141,139', '73,200,70,323(again)'] +2024-06-12 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo)', '235(ok),236(again),496(ok),110(ok),1448(again!)', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '62,572,57'] +2024-06-11 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo)', '503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '146,460,582(ok*),139(ok),322(todo)', '11,647,261(again),133(again)', '322,191,190'] +2024-06-10 -> ['236(again*),1448(again),needcode_trie,208(ok*),needcode_graph,695,22(todo),981(todo),207(todo)', '503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '235(ok),236(again),496(ok),110(ok),1448(again!)', '150,22(again),739(again!!!),needcode_linkedlist', '127,742(again),133(again),207(ok*),261(ok)', '143,15,268,141,139', '73,200,70,323(again)'] 2024-06-09 -> ['503(todo),739(ok),105(todo),needcode_heap_pq,1046,215,needcode_backtrack,78,39(todo),46,90(todo),77', '235(ok),236(again),496(ok),110(ok),1448(again!)', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '128,261', '21,20,19,271,269', '207,79,206,213,198'] 2024-06-08 -> ['235(ok),236(again),496(ok),110(ok),1448(again!)', '206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '150,22(again),739(again!!!),needcode_linkedlist', '146,460,582(ok*),139(ok),322(todo)', '005,003(again)', '417(again),33,153,152', '212(todo),211,338,208(again)'] 2024-06-07 -> ['206,143,138(again),141,needcode_tree,226,104,110(again!!!)', '150,22(again),739(again!!!),needcode_linkedlist', '567(todo),needcode_array_hash,needcode_sliding_window,567(again),needcode_stack,155(again)', '127,742(again),133(again),207(ok*),261(ok)', '424,297(todo),295(todo),39', '347,253(todo),91(todo),217'] diff --git a/leetcode_java/src/main/java/LeetCodeJava/BFS/CourseSchedule.java b/leetcode_java/src/main/java/LeetCodeJava/BFS/CourseSchedule.java index 18c32ae8..27faecd5 100644 --- a/leetcode_java/src/main/java/LeetCodeJava/BFS/CourseSchedule.java +++ b/leetcode_java/src/main/java/LeetCodeJava/BFS/CourseSchedule.java @@ -9,11 +9,57 @@ public class CourseSchedule { // V0 // IDEA : DFS // TODO : implement + // NOTE !!! instead of maintain status (0,1,2), below video offers a simpler approach + // -> e.g. use a set, recording the current visiting course, if ANY duplicated (already in set) course being met, + // -> means "cyclic", so return false directly + // https://www.youtube.com/watch?v=EgI5nU9etnU // VO' // IDEA : TOPOLOGICAL SORT // TODO : implement + // V0'' + // IDEA : DFS + // https://github.com/neetcode-gh/leetcode/blob/main/java/0207-course-schedule.java + // https://www.youtube.com/watch?v=EgI5nU9etnU + public boolean canFinish_0_1(int numCourses, int[][] prerequisites) { + List> adj = new ArrayList<>(); + for (int i = 0; i < numCourses; i++) { + adj.add(new ArrayList<>()); + } + + for (int i = 0; i < prerequisites.length; i++) { + adj.get(prerequisites[i][0]).add(prerequisites[i][1]); + } + + int[] visited = new int[numCourses]; + for (int i = 0; i < numCourses; i++) { + if (visited[i] == 0) { + if (isCyclic(adj, visited, i)) { + return false; + } + } + } + return true; + } + + private boolean isCyclic(List> adj, int[] visited, int curr) { + if (visited[curr] == 2) { + return true; + } + + visited[curr] = 2; + for (int i = 0; i < adj.get(curr).size(); i++) { + if (visited[adj.get(curr).get(i)] != 1) { + if (isCyclic(adj, visited, adj.get(curr).get(i))) { + return true; + } + } + } + visited[curr] = 1; + return false; + } + // V0'' // IDEA : DFS // https://github.com/yennanliu/CS_basics/blob/master/leetcode_python/Breadth-First-Search/course-schedule.py