Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

อันดับสัมพัทธ์ใน C++


สมมติว่าเรามีรายชื่อนักกีฬา N คน เราต้องหาอันดับญาติและคนที่ได้คะแนนสูงสุด 3 อันดับแรก ซึ่งจะได้เหรียญรางวัลต่างกัน:"ทอง" "เงิน" และ "ทองแดง"

ดังนั้นหากอินพุตเป็น [2,5,3,1,0] ผลลัพธ์จะเป็น [Bronze,Gold,Silver,4,5]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ถ้าขนาดของ nums เท่ากับ 1 แล้ว −

    • คืน "ทอง"

  • ถ้าขนาดของ nums เท่ากับ 2 แล้ว −

    • ถ้า nums[0]> nums[1] แล้ว −

      • คืน "ทอง" "เงิน"

    • มิฉะนั้น

      • คืน "เงิน", "ทอง"

  • กำหนดอาร์เรย์ v

  • DDefine vec อาร์เรย์

  • สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของ nums ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -

    • ใส่ nums[i] ต่อท้าย v

  • จัดเรียงอาร์เรย์ v

  • กลับอาร์เรย์ v

  • กำหนดหนึ่ง mp mp

  • ถ้าขนาดของ nums> 2 แล้ว −

    • แทรก {v[0], "Gold" } ลงใน mp

    • แทรก {v[1], "Silver" } ลงใน mp

    • แทรก {v[2], "Bronze" } ลงใน mp

    • สำหรับการเริ่มต้น i :=3 เมื่อฉัน <ขนาด v อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -

      • แทรก { v[i], i + 1 เป็นสตริง} ลงใน mp

    • สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของ nums ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -

      • แทรก mp[nums[i]] ที่ส่วนท้ายของ 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, ]