rustgym/leetcode/
_506_relative_ranks.rs

1struct Solution;
2
3#[derive(Debug, PartialEq, Eq, Clone)]
4struct Athlete {
5    index: usize,
6    score: i32,
7    rank: String,
8}
9
10impl Solution {
11    fn find_relative_ranks(nums: Vec<i32>) -> Vec<String> {
12        let n = nums.len();
13        let mut a: Vec<Athlete> = vec![];
14        for i in 0..n {
15            a.push(Athlete {
16                index: i,
17                score: nums[i],
18                rank: "".to_string(),
19            });
20        }
21        a.sort_unstable_by(|a, b| b.score.cmp(&a.score));
22        for i in 0..n {
23            a[i].rank = match i {
24                0 => "Gold Medal".to_string(),
25                1 => "Silver Medal".to_string(),
26                2 => "Bronze Medal".to_string(),
27                _ => format!("{}", i + 1),
28            }
29        }
30        a.sort_unstable_by(|a, b| a.index.cmp(&b.index));
31        a.into_iter().map(|a| a.rank).collect()
32    }
33}
34
35#[test]
36fn test() {
37    let nums = vec![5, 4, 3, 2, 1];
38    let res = vec!["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"];
39    assert_eq!(Solution::find_relative_ranks(nums), res);
40}