Skip to content

Commit 6776de1

Browse files
committed
Time: 209 ms (15.63%), Space: 135 MB (9.94%) - LeetHub
1 parent 5f46ec8 commit 6776de1

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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

Comments
 (0)