Skip to content

Commit c2fc8bc

Browse files
committed
Create 1743-restore-the-array-from-adjacent-pairs.rs
1 parent 6182398 commit c2fc8bc

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
pub fn restore_array(adjacent_pairs: Vec<Vec<i32>>) -> Vec<i32> {
2+
use std::collections::HashMap;
3+
let mut mmp = HashMap::new();
4+
for p in adjacent_pairs {
5+
mmp.entry(p[0]).or_insert(Vec::new()).push(p[1]);
6+
mmp.entry(p[1]).or_insert(Vec::new()).push(p[0]);
7+
}
8+
let mut head = 0;
9+
for (k, v) in &mmp {
10+
if v.len() == 1 {
11+
head = *k;
12+
break;
13+
}
14+
}
15+
// Firstly, find the head or tail
16+
let mut ret = vec![head];
17+
let mut count = 1;
18+
let mut prev = head;
19+
loop {
20+
let current = ret.iter().last().unwrap().clone();
21+
let item = &mmp[&current];
22+
if item.len() == 1 {
23+
ret.push(item[0]);
24+
} else {
25+
if item[0] == prev {
26+
ret.push(item[1]);
27+
} else {
28+
ret.push(item[0]);
29+
}
30+
}
31+
prev = current;
32+
count += 1;
33+
if count == mmp.len() { break }
34+
}
35+
ret
36+
}
37+
38+
fn main() {
39+
let adjacent_pairs = vec![vec![2,1], vec![3,4], vec![3,2]];
40+
println!("{:?}", restore_array(adjacent_pairs));
41+
}

0 commit comments

Comments
 (0)