问题
思路
借助哈希表进行排序。跟倒排索引差不多。通过值关联索引。
代码
class Solution {
public:
vector<string> findRelativeRanks(vector<int>& nums) {
int sz = nums.size();
std::vector<std::string> ret(sz);
if(!sz) return ret;
std::map<int, int> mapper;
for(int i = 0; i < sz; ++i){
mapper[nums[i]] = i;
}
typedef std::map<int, int>::const_iterator const_iter;
const_iter b = mapper.begin();
const_iter e = mapper.end();
int cnt = sz;
while(b != e){
std::string& ans = ret[b->second];
if(1==cnt) ans="Gold Medal";
else if(2 == cnt) ans="Silver Medal";
else if(3 == cnt) ans="Bronze Medal";
else ans=decimal2String(cnt);
--cnt;
++b;
}
return ret;
}
private:
std::string decimal2String(int val){
std::stringstream ss;
ss << val;
return ss.str();
}
};