From 4cb30e4b1be636279f0f1134d7505b110bb3fd2b Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Wed, 8 May 2024 13:06:34 +0200 Subject: [PATCH] =?UTF-8?q?rs:=20add=20=C2=AB506.=20Relative=20Ranks=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- rs/relative-ranks.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 rs/relative-ranks.rs diff --git a/rs/relative-ranks.rs b/rs/relative-ranks.rs new file mode 100644 index 0000000..4788ec0 --- /dev/null +++ b/rs/relative-ranks.rs @@ -0,0 +1,30 @@ +use std::collections::BinaryHeap; + +impl Solution { + fn pos_to_string(pos: usize) -> String { + match pos { + 0 => String::from("Gold Medal"), + 1 => String::from("Silver Medal"), + 2 => String::from("Bronze Medal"), + _ => format!("{}", pos + 1), + } + } + + pub fn find_relative_ranks(score: Vec) -> Vec { + let mut heap = BinaryHeap::new(); + + for (i, s) in score.into_iter().enumerate() { + heap.push((s, i)); + } + + let mut ranks = vec![String::new(); heap.len()]; + + let mut i = 0; + while let Some((_, idx)) = heap.pop() { + ranks[idx] = Self::pos_to_string(i); + i += 1; + } + + ranks + } +}