File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed Expand file tree Collapse file tree 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