Array of Doubled Pairs LeetCode solution in Rust

1
use std::collections::*;
2
impl Solution {
3
pub fn can_reorder_doubled(arr: Vec<i32>) -> bool {
4
let mut btreemap = BTreeMap::new();
5
let mut count = 0;
6
for v in arr {
7
if v != 0 {
8
count += 1;
9
*btreemap.entry(v).or_insert(0) += 1;
10
}
11
}
12
if count % 2 == 1 {
13
return false;
14
}
15

16
while btreemap.keys().len() > 0 {
17
let (&val, &num) = btreemap.iter().next().unwrap();
18
let tval = if val < 0 {
19
if val % 2 != 0 {
20
return false;
21
}
22
val / 2
23
} else {
24
val * 2
25
};
26

27
if let Some(num) = btreemap.get_mut(&tval) {
28
if *num == 1 {
29
btreemap.remove(&tval);
30
} else {
31
*num -= 1;
32
}
33
} else {
34
return false;
35
}
36

37
if num == 1 {
38
btreemap.remove(&val);
39
} else {
40
btreemap.insert(val, num - 1);
41
}
42
}
43
true
44
}
45
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0