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.