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 + } +}