龙空技术网

算法:相对名次

小猿陪学 112

前言:

此时咱们对“算法的名次解释”大体比较重视,同学们都想要了解一些“算法的名次解释”的相关文章。那么小编也在网络上搜集了一些关于“算法的名次解释””的相关知识,希望咱们能喜欢,咱们一起来了解一下吧!

题目:

给出 N 名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”,“银牌” 和“ 铜牌”("Gold Medal", "Silver Medal", "Bronze Medal")。

(注:分数越高的选手,排名越靠前。)

示例:

输入: [5, 4, 3, 2, 1]

输出: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]

解释: 前三名运动员的成绩为前三高的,因此将会分别被授予 “金牌”,“银牌”和“铜牌” ("Gold Medal", "Silver Medal" and "Bronze Medal").

余下的两名运动员,我们只需要通过他们的成绩计算将其相对名次即可。

思路:

重点在于排序后保留原数组的索引,所以把数组的值和索引组成pair,然后排序。

代码:

class Solution {public:    vector<string> findRelativeRanks(vector<int>& score) {        vector<pair<int,int>> v;        for(int i=0; i<score.size(); i++)        {            v.push_back(make_pair(i, score[i]));        }        sort(v.begin(), v.end(), [](pair<int,int>& a, pair<int,int>& b)->bool{            return a.second > b.second;        });        vector<string> result;        result.resize(score.size());        for(int i=0; i<v.size(); i++)        {            auto& pair = v[i];            if(i==0)             result[pair.first] = "Gold Medal";            else if(i==1)                    result[pair.first] = "Silver Medal";            else if(i==2)                    result[pair.first] = "Bronze Medal";            else                result[pair.first] = to_string(i+1);        }        return result;    }};

标签: #算法的名次解释