File tree Expand file tree Collapse file tree 2 files changed +89
-0
lines changed
Expand file tree Collapse file tree 2 files changed +89
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * @param {number } numCourses
3+ * @param {number[][] } prerequisites
4+ * @return {boolean }
5+ */
6+ var canFinish = function ( numCourses , prerequisites ) {
7+ const from = new Map ( )
8+ const to = new Map ( )
9+ for ( let i = 0 ; i < numCourses ; i ++ ) {
10+ from . set ( i , 0 )
11+ }
12+
13+ for ( let i = 0 ; i < prerequisites . length ; i ++ ) {
14+ const [ a , b ] = prerequisites [ i ]
15+ if ( ! to . get ( b ) ) to . set ( b , [ ] )
16+ to . get ( b ) . push ( a )
17+ from . set ( a , from . get ( a ) + 1 )
18+ }
19+
20+ const q = [ ]
21+ for ( let val of from ) {
22+ if ( val [ 1 ] === 0 ) {
23+ q . push ( val [ 0 ] )
24+ from . delete ( val [ 0 ] )
25+ }
26+ }
27+ while ( q . length ) {
28+ const cur = q . shift ( )
29+ const arr = to . get ( cur )
30+ if ( arr ) {
31+ for ( let i = 0 ; i < arr . length ; i ++ ) {
32+ const val = to . get ( cur ) [ i ]
33+ from . set ( val , from . get ( val ) - 1 )
34+ if ( from . get ( val ) === 0 ) {
35+ q . push ( val )
36+ from . delete ( val )
37+ }
38+ }
39+ }
40+
41+ }
42+
43+ return from . size === 0
44+ } ;
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 from = new Map ( )
8+ const to = new Map ( )
9+ const ans = [ ]
10+ for ( let i = 0 ; i < numCourses ; i ++ ) {
11+ from . set ( i , 0 )
12+ }
13+ for ( let i = 0 ; i < prerequisites . length ; i ++ ) {
14+ const [ a , b ] = prerequisites [ i ]
15+ if ( ! to . get ( b ) ) to . set ( b , [ ] )
16+ to . get ( b ) . push ( a )
17+ from . set ( a , from . get ( a ) + 1 )
18+ }
19+ const q = [ ]
20+
21+ for ( const val of from ) {
22+ if ( val [ 1 ] === 0 ) {
23+ q . push ( val [ 0 ] )
24+ from . delete ( val [ 0 ] )
25+ }
26+ }
27+
28+ while ( q . length ) {
29+ const val = q . shift ( )
30+ ans . push ( val )
31+ const arr = to . get ( val )
32+ if ( arr ) {
33+ for ( let i = 0 ; i < arr . length ; i ++ ) {
34+ const value = arr [ i ]
35+ from . set ( value , from . get ( value ) - 1 )
36+ if ( from . get ( value ) === 0 ) {
37+ q . push ( value )
38+ from . delete ( value )
39+ }
40+ }
41+ }
42+
43+ }
44+ return from . size === 0 ? ans : [ ]
45+ } ;
You can’t perform that action at this time.
0 commit comments