Skip to content

Commit 45a8cfe

Browse files
authored
Create valid-arrangement-of-pairs.cpp
1 parent 9f1a5bf commit 45a8cfe

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

C++/valid-arrangement-of-pairs.cpp

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

0 commit comments

Comments
 (0)