问题描述:
Given scores of N athletes, find their relative ranks and the people with the top three highest scores, who will be awarded medals: "Gold Medal", "Silver Medal" and "Bronze Medal".
Note:
- N is a positive integer and won't exceed 10,000.
- All the scores of athletes are guaranteed to be unique.
示例:
Input: [5, 4, 3, 2, 1] Output: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"] Explanation: The first three athletes got the top three highest scores, so they got "Gold Medal", "Silver Medal" and "Bronze Medal".问题分析:
For the left two athletes, you just need to output their relative ranks according to their scores.
利用hashtable求解即可,过程详见代码:
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& nums) {
vector<int> nums2 = nums;
sort(nums.begin(),nums.end());
map<int,int> m;
vector<string> res;
for(int i = nums.size() - 1,j = 1;i >= 0 ; i--)
{
m.insert(pair<int,int>(nums[i],j++));
}
for(int i = 0; i < nums2.size(); i++)
{
if(m[nums2[i]] == 1) res.push_back("Gold Medal");
else if(m[nums2[i]] == 2) res.push_back("Silver Medal");
else if(m[nums2[i]] == 3) res.push_back("Bronze Medal");
else res.push_back(to_string(m[nums2[i]])); // c++ 11支持
}
return res;
}
};