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

Relative Ranks ใน C++

แนวคิด

สมมติว่ามีรายการคะแนนของนักกีฬา N คน ให้หา relative ranks และคนที่ได้คะแนนสูงสุด 3 อันดับแรก จะได้เหรียญ "Gold", "Silver" และ "Bronze"

เช่น ถ้าอินพุตคือ [2,5,3,1,0] ผลลัพธ์คือ [Bronze, Gold, Silver, 4, 5]

วิธีแก้:

  • ถ้าขนาด nums เท่ากับ 1: คืนค่า "Gold"
  • ถ้าขนาด nums เท่ากับ 2: ถ้า nums[0] > nums[1]: คืนค่า "Gold", "Silver" มิฉะนั้น: คืนค่า "Silver", "Gold"
  • กำหนดอาร์เรย์ v
  • กำหนดอาร์เรย์ vec
  • วนลูป i := 0 ถึงขนาด nums - 1: แทรก nums[i] ลงท้าย v
  • เรียงอาร์เรย์ v
  • กลับลำดับอาร์เรย์ v
  • กำหนด map mp
  • ถ้าขนาด nums > 2: แทรก {v[0], "Gold"} ลง mp, {v[1], "Silver"} ลง mp, {v[2], "Bronze"} ลง mp, วนลูป i := 3 ถึงขนาด v - 1: แทรก {v[i], i+1 เป็นสตริง} ลง mp, วนลูป i := 0 ถึงขนาด nums - 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, ]