File tree Expand file tree Collapse file tree 1 file changed +47
-0
lines changed
solution/2000-2099/2097.Valid Arrangement of Pairs 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+ * @param {number[][] } pairs
3+ * @return {number[][] }
4+ */
5+ var validArrangement = function ( pairs ) {
6+ const graph = new Map ( ) ;
7+ const indegree = new Map ( ) ;
8+ const outdegree = new Map ( ) ;
9+
10+ for ( const [ start , end ] of pairs ) {
11+ if ( ! graph . has ( start ) ) graph . set ( start , [ ] ) ;
12+ graph . get ( start ) . push ( end ) ;
13+
14+ outdegree . set ( start , ( outdegree . get ( start ) || 0 ) + 1 ) ;
15+ indegree . set ( end , ( indegree . get ( end ) || 0 ) + 1 ) ;
16+ }
17+
18+ let startNode = pairs [ 0 ] [ 0 ] ;
19+ for ( const [ node , out ] of outdegree ) {
20+ const inCount = indegree . get ( node ) || 0 ;
21+ if ( out - inCount === 1 ) {
22+ startNode = node ;
23+ break ;
24+ }
25+ }
26+
27+ const result = [ ] ;
28+ const stack = [ startNode ] ;
29+
30+ while ( stack . length ) {
31+ const node = stack [ stack . length - 1 ] ;
32+ if ( graph . has ( node ) && graph . get ( node ) . length > 0 ) {
33+ stack . push ( graph . get ( node ) . pop ( ) ) ;
34+ } else {
35+ result . push ( stack . pop ( ) ) ;
36+ }
37+ }
38+
39+ result . reverse ( ) ;
40+
41+ const output = [ ] ;
42+ for ( let i = 1 ; i < result . length ; i ++ ) {
43+ output . push ( [ result [ i - 1 ] , result [ i ] ] ) ;
44+ }
45+
46+ return output ;
47+ } ;
You can’t perform that action at this time.
0 commit comments