1
+ class Solution {
2
+ public int [][] validArrangement (int [][] pairs ) {
3
+ Map <Integer ,Integer > indeg = new HashMap <>();
4
+ Map <Integer ,Integer > outdeg = new HashMap <>();
5
+ Map <Integer , Stack <Integer >> adj = new HashMap <>();
6
+ int start = pairs [0 ][0 ];
7
+
8
+ for (int [] p : pairs ){
9
+ adj .computeIfAbsent (p [0 ], v -> new Stack <>()).push (p [1 ]);
10
+ indeg .put (p [1 ],indeg .getOrDefault (p [1 ],0 )+1 );
11
+ outdeg .put (p [0 ],outdeg .getOrDefault (p [0 ],0 )+1 );
12
+ }
13
+
14
+ //to get staring node:-
15
+ for (int [] p : pairs ) {
16
+ if (indeg .getOrDefault (p [0 ], 0 ) - outdeg .getOrDefault (p [0 ], 0 ) == -1 ) {
17
+ start = p [0 ];
18
+ break ;
19
+ }
20
+ }
21
+ List <int []> path = new ArrayList <>();
22
+ dfs (start , adj , path );
23
+ int [][] ans = new int [path .size ()][2 ];
24
+ int cnt = 0 ;
25
+ for (int i = path .size () - 1 ; i >= 0 ; i --){
26
+ ans [cnt ] = new int []{path .get (i )[1 ], path .get (i )[0 ]};
27
+ cnt ++;
28
+ }
29
+ return ans ;
30
+ }
31
+ public void dfs (int start ,Map <Integer , Stack <Integer >> adj , List <int []> path ){
32
+ Stack <Integer > st = adj .getOrDefault (start , new Stack <>());
33
+ while (!st .isEmpty ()) {
34
+ int adjnode = st .pop ();
35
+ dfs (adjnode , adj , path );
36
+ path .add (new int []{adjnode , start });
37
+ }
38
+ }
39
+ }
0 commit comments