File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Time: O(|V| + |E|)
2
+ // Space: O(|V| + |E|)
3
+
4
+ // Hierholzer Algorithm
5
+ class Solution {
6
+ public:
7
+ vector<vector<int >> validArrangement (vector<vector<int >>& pairs) {
8
+ unordered_map<int , vector<int >> adj;
9
+ unordered_map<int , int > degree;
10
+ for (const auto & pair : pairs) {
11
+ adj[pair[0 ]].emplace_back (pair[1 ]);
12
+ ++degree[pair[0 ]];
13
+ --degree[pair[1 ]];
14
+ }
15
+ int x = -1 ;
16
+ for (auto & [k, v] : degree) {
17
+ if (v == 1 ) {
18
+ x = k;
19
+ break ;
20
+ }
21
+ if (x == -1 ) {
22
+ x = k;
23
+ }
24
+ }
25
+ vector<int > route;
26
+ vector<int > stk = {x};
27
+ while (!empty (stk)) {
28
+ while (!empty (adj[stk.back ()])) {
29
+ auto x = adj[stk.back ()].back ();
30
+ adj[stk.back ()].pop_back ();
31
+ stk.emplace_back (x);
32
+
33
+ }
34
+ route.emplace_back (stk.back ());
35
+ stk.pop_back ();
36
+ }
37
+ reverse (begin (route), end (route));
38
+ vector<vector<int >> result;
39
+ for (int i = 0 ; i + 1 < size (route); ++i) {
40
+ result.push_back ({route[i], route[i + 1 ]});
41
+ }
42
+ return result;
43
+ }
44
+ };
You can’t perform that action at this time.
0 commit comments