C ++中的相对排名

假设我们有N个运动员的得分列表,我们必须找到他们的相对排名以及得分最高的前三名的人,他们将获得不同的奖牌:“金牌”,“银牌”和“铜牌”。

因此,如果输入类似于[2,5,3,1,0],则输出将为[Bronze,Gold,Silver,4,5]

为了解决这个问题,我们将遵循以下步骤-

  • 如果nums的大小等于1,则-

    • 返回“金牌”

  • 如果nums的大小等于2,则-

    • 返回“银”,“金”

    • 返回“金”,“银”

    • 如果nums [0]> nums [1],则-

    • 除此以外

  • 定义数组v

  • D定义数组vec

  • 对于初始化i:= 0,当i <nums大小时,更新(将i增加1),执行-

    • 在v的末尾插入nums [i]

  • 对数组v排序

  • 反转数组v

  • 定义一张映射mp

  • 如果nums的大小> 2,则-

    • 在vec的末尾插入mp [nums [i]]

    • 将{v [i],i + 1作为字符串}插入mp

    • 将{v [0],“ Gold”}插入mp

    • 将{v [1],“ Silver”}插入mp

    • 将{v [2],“ Bronze”}插入mp

    • 对于初始化i:= 3,当i <v的大小时,更新(将i增加1),执行-

    • 对于初始化i:= 0,当i <nums大小时,更新(将i增加1),执行-

  • 返回vec

例 

让我们看下面的实现以更好地理解-

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<string> findRelativeRanks(vector<int>& nums){
      if (nums.size() == 1){
         return { "Gold" };
      }
      if (nums.size() == 2){
         if (nums[0] > nums[1])
            return { "Gold", "Silver" };
         else
            return { "Silver", "Gold" };
      }
      vector<int> v;
      vector<string> vec;
      for (int i = 0; i < nums.size(); i++)
         v.push_back(nums[i]);
      sort(v.begin(), v.end());
      reverse(v.begin(), v.end());
      map<int, string> mp;
      if (nums.size() > 2) {
         mp.insert({v[0], "Gold" });
         mp.insert({v[1], "Silver" });
         mp.insert({v[2], "Bronze" });
         for (int i = 3; i < v.size(); i++) {
            mp.insert({ v[i], to_string(i + 1) });
         }
         for (int i = 0; i < nums.size(); i++)
            vec.push_back(mp[nums[i]]);
      }
      return vec;
   }
};
main(){
   Solution ob;
   vector<int> v = {2,5,3,1,0};
   print_vector(ob.findRelativeRanks(v));
}

输入项

{2,5,3,1,0}

输出结果

[Bronze, Gold, Silver, 4, 5, ]