File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number } numCourses
3
+ * @param {number[][] } prerequisites
4
+ * @return {number[] }
5
+ */
6
+ var findOrder = function ( numCourses , prerequisites ) {
7
+ const prereq = [ ] ;
8
+ for ( let i = 0 ; i < numCourses ; i ++ ) {
9
+ prereq [ i ] = [ ] ;
10
+ } ;
11
+ for ( const [ crs , pre ] of prerequisites ) {
12
+ prereq [ crs ] . push ( pre ) ;
13
+ } ;
14
+
15
+ const output = [ ] ;
16
+ const visit = new Set ( ) ;
17
+ const cycle = new Set ( ) ;
18
+ function dfs ( course ) {
19
+ if ( cycle . has ( course ) ) return false ;
20
+ if ( visit . has ( course ) ) return true ;
21
+
22
+ cycle . add ( course ) ;
23
+ for ( const pre of prereq [ course ] ) {
24
+ if ( ! dfs ( pre ) ) return false ;
25
+ }
26
+ cycle . delete ( course ) ;
27
+ visit . add ( course ) ;
28
+ output . push ( course ) ;
29
+ return true ;
30
+ } ;
31
+
32
+ for ( let j = 0 ; j < numCourses ; j ++ ) {
33
+ if ( ! dfs ( j ) ) return [ ] ;
34
+ } ;
35
+ return output ;
36
+ } ;
You can’t perform that action at this time.
0 commit comments