C++ 中的相对排名


假设我们有一份 N 名运动员的成绩列表,我们需要找到他们的相对排名,以及前三名运动员的排名,他们将获得不同的奖牌:“金牌”、“银牌”和“铜牌”。

因此,如果输入类似于 [2,5,3,1,0],则输出将是 [铜牌,金牌,银牌,4,5]

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

  • 如果 nums 的大小为 1,则:

    • 返回 "金牌"

  • 如果 nums 的大小为 2,则:

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

      • 返回 "金牌","银牌"

    • 否则

      • 返回 "银牌","金牌"

  • 定义一个数组 v

  • 定义一个数组 vec

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

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

  • 对数组 v 进行排序

  • 反转数组 v

  • 定义一个映射 mp

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

    • 将 {v[0], "金牌"} 插入 mp

    • 将 {v[1], "银牌"} 插入 mp

    • 将 {v[2], "铜牌"} 插入 mp

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

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

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

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

  • 返回 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, ]

更新于:2020年6月10日

150 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.