File tree 1 file changed +47
-0
lines changed
1 file changed +47
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @description
3
+ * memoization + dfs
4
+ *
5
+ * n = length of nums
6
+ * p = length of prerequisites
7
+ *
8
+ * time complexity: O(n)
9
+ * space complexity: O(p)
10
+ */
11
+ var canFinish = function ( numCourses , prerequisites ) {
12
+ const memo = Array . from ( { length : numCourses + 1 } , ( ) => false ) ;
13
+ const visited = Array . from ( { length : numCourses + 1 } , ( ) => false ) ;
14
+ // graph setting
15
+ const graph = prerequisites . reduce ( ( map , [ linkedNode , current ] ) => {
16
+ const list = map . get ( current ) ?? [ ] ;
17
+ list . push ( linkedNode ) ;
18
+ map . set ( current , list ) ;
19
+ return map ;
20
+ } , new Map ( ) ) ;
21
+
22
+ const dfs = ( current ) => {
23
+ const linkedNode = graph . get ( current ) ;
24
+
25
+ if ( memo [ current ] || ! linkedNode || linkedNode . length === 0 ) return true ;
26
+
27
+ for ( const node of linkedNode ) {
28
+ if ( visited [ node ] ) return false ;
29
+
30
+ visited [ node ] = true ;
31
+ if ( ! dfs ( node ) ) return false ;
32
+ visited [ node ] = false ;
33
+ memo [ node ] = true ;
34
+ }
35
+
36
+ return true ;
37
+ } ;
38
+
39
+ for ( const [ current ] of graph ) {
40
+ visited [ current ] = true ;
41
+ if ( ! dfs ( current ) ) return false ;
42
+ visited [ current ] = false ;
43
+ memo [ current ] = true ;
44
+ }
45
+
46
+ return true ;
47
+ } ;
You can’t perform that action at this time.
0 commit comments