原文题目:
解题:
思路就是,先将原数组排序,如[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; } };