Computer >> Máy Tính >  >> Lập trình >> C ++

Xếp hạng tương đối trong C ++

Giả sử chúng ta có danh sách điểm của N vận động viên, chúng ta phải tìm thứ hạng tương đối của họ và những người có ba điểm cao nhất hàng đầu, những người sẽ giành được các huy chương khác nhau:"Vàng", "Bạc" và "Đồng".

Vì vậy, nếu đầu vào là [2,5,3,1,0], thì đầu ra sẽ là [Đồng, Vàng, Bạc, 4,5]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu kích thước của num bằng 1, thì -

    • trả lại "Vàng"

  • nếu kích thước của num bằng 2, thì -

    • nếu nums [0]> nums [1], thì -

      • trả lại "Vàng", "Bạc"

    • Nếu không

      • trả lại "Bạc", "Vàng"

  • Xác định một mảng v

  • DDefine một mảng vec

  • để khởi tạo i:=0, khi tôi

    • chèn nums [i] vào cuối v

  • sắp xếp mảng v

  • đảo ngược mảng v

  • Xác định một bản đồ mp

  • nếu kích thước của nums> 2, thì -

    • chèn {v [0], "Gold"} vào mp

    • chèn {v [1], "Silver"} vào mp

    • chèn {v [2], "Bronze"} vào mp

    • để khởi tạo i:=3, khi i

      • chèn {v [i], i + 1 dưới dạng chuỗi} vào mp

    • để khởi tạo i:=0, khi tôi

      • chèn mp [nums [i]] vào cuối vec

  • trả về vec

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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));
}

Đầu vào

{2,5,3,1,0}

Đầu ra

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