方法一,借助关联容器,此方法时间复杂度和空间复杂度都较高

 1 class Solution 
 2 {
 3 public:
 4     vector<string> findRelativeRanks(vector<int>& nums) 
 5     {
 6         int sz=nums.size();
 7         vector<int> copynums=nums;
 8         sort(copynums.begin(),copynums.end());
 9         reverse(copynums.begin(),copynums.end());
10         unordered_map<int,int> itoimap;
11         int rank=0;
12         for(int i:copynums)   
13             itoimap[i]=++rank;
14         vector<string> res(sz);
15         for(int j=0;j<sz;j++)
16         {
17             if(itoimap[nums[j]]==1)
18                 res[j]="Gold Medal";
19             else if(itoimap[nums[j]]==2)
20                 res[j]="Silver Medal";
21             else if(itoimap[nums[j]]==3)
22                 res[j]="Bronze Medal";
23             else
24                 res[j]=to_string(itoimap[nums[j]]);
25         }
26         return res;
27     }
28 };

方法二,核心思想是把分数当做下标,最大的分数下标最远。

新建一个容器,把分数作为下标,将该下标处的值置该分数在原容器中的位置。

之后从右到左扫描容器,顺序输出排名即可

 1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     vector<string> findRelativeRanks(vector<int>& nums) 
12     {
13         int sz=nums.size();
14         int maxnum=nums[0];
15         for(int i:nums)
16             maxnum=max(maxnum,i);
17         vector<int> rankve(maxnum+1,-1);
18         for(int j=0;j<sz;j++)
19             rankve[nums[j]]=j;
20         int currank=1;
21         vector<string> res(sz);
22         for(int k=maxnum;k>=0;k--)
23         {
24             if(rankve[k]>=0)
25             {
26                 if(currank==1)
27                     res[rankve[k]]="Gold Medal";
28                 else if(currank==2)
29                     res[rankve[k]]="Silver Medal";
30                 else if(currank==3)
31                     res[rankve[k]]="Bronze Medal";
32                 else
33                     res[rankve[k]]=to_string(currank);
34                 currank++;
35             }
36         }
37         return res;
38     }
39 };

此方法时间复杂度和空间复杂度均较低。

posted on 2018-06-03 20:34  高数考了59  阅读(131)  评论(0)    收藏  举报