rustgym/leetcode/
_506_relative_ranks.rs1struct 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}