diff --git a/rs/find-players-with-zero-or-one-losses.rs b/rs/find-players-with-zero-or-one-losses.rs new file mode 100644 index 0000000..ecae6e3 --- /dev/null +++ b/rs/find-players-with-zero-or-one-losses.rs @@ -0,0 +1,28 @@ +use std::collections::BTreeMap; + +impl Solution { + fn find_answer(counters: &BTreeMap, key: i32) -> Vec { + counters + .iter() + .filter_map(|(&player, &losses)| if losses == key { Some(player) } else { None }) + .collect() + } + + pub fn find_winners(matches: Vec>) -> Vec> { + let mut counters: BTreeMap = BTreeMap::new(); + + for m in &matches { + let [win, lose, ..] = m[..] else { + unreachable!() + }; + + counters.entry(win).or_insert(0); + *counters.entry(lose).or_insert(0) += 1; + } + + vec![0, 1] + .iter() + .map(|&c| Solution::find_answer(&counters, c)) + .collect() + } +}