前言:
此时咱们对“算法的名次解释”大体比较重视,同学们都想要了解一些“算法的名次解释”的相关文章。那么小编也在网络上搜集了一些关于“算法的名次解释””的相关知识,希望咱们能喜欢,咱们一起来了解一下吧!题目:
给出 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; }};
标签: #算法的名次解释