Array of Doubled Pairs LeetCode solution in Rust
1use std::collections::*;2impl Solution {3pub fn can_reorder_doubled(arr: Vec<i32>) -> bool {4let mut btreemap = BTreeMap::new();5let mut count = 0;6for v in arr {7if v != 0 {8count += 1;9*btreemap.entry(v).or_insert(0) += 1;10}11}12if count % 2 == 1 {13return false;14}1516while btreemap.keys().len() > 0 {17let (&val, &num) = btreemap.iter().next().unwrap();18let tval = if val < 0 {19if val % 2 != 0 {20return false;21}22val / 223} else {24val * 225};2627if let Some(num) = btreemap.get_mut(&tval) {28if *num == 1 {29btreemap.remove(&tval);30} else {31*num -= 1;32}33} else {34return false;35}3637if num == 1 {38btreemap.remove(&val);39} else {40btreemap.insert(val, num - 1);41}42}43true44}45}