原文题目:
解题:
思路就是,先将原数组排序,如[21,8,9,10,11]降序排序后为[21,11,10,9,8] 建立map关系{21:0,11:1,10:2,9:3,8:4},然后遍历原数组[21,8,9,10,11]获取相应key对应的value,即可知道排名,然后0,1,2,替换为金银铜,其他的替换为相应的4,5,6即可
AC代码:
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& nums)
{
vector <string> vec;
vector <int> tmp;
map <int,int> m;
int idx = 0;
tmp = nums;
sort(tmp.begin(),tmp.end(),greater<int>()); //降序排列
for(idx = 0; idx < tmp.size();idx++)
{
m[tmp[idx]] = idx; //将排序后的数值和索引建立map
}
for(idx = 0; idx < nums.size();idx++) //遍历原先的nums数组,如果其对应的是0,1,2则替换,如果不是则用map对应的值+1即可(下标从0开始,故加1)
{
if(m[nums[idx]] == 0)
{
vec.push_back("Gold Medal");
}
else if(m[nums[idx]] == 1)
{
vec.push_back("Silver Medal");
}
else if(m[nums[idx]] == 2)
{
vec.push_back("Bronze Medal");
}
else
{
vec.push_back(to_string(m[nums[idx]]+1));
}
}
return vec;
}
};