Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Relative Ranks trong C++


Cho mảng điểm số của N vận động viên. Xếp hạng: 1 → "Gold", 2 → "Silver", 3 → "Bronze", các thứ khác → số thứ tự.

Ví dụ: [2,5,3,1,0] → điểm cao nhất 5 (Gold), tiếp 3 (Silver), 2 (Bronze), 1 (4), 0 (5) → ["Bronze","Gold","Silver","4","5"].

Giải thuật

  1. Sao chép mảng điểm, sắp xếp giảm dần.
  2. Tạo map từ điểm → huy hiệu/thứ hạng.
  3. Duyệt mảng gốc, tra map để lấy kết quả.

Ví dụ triển khai C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    vector<string> findRelativeRanks(vector<int>& score) {
        int n = score.size();
        vector<int> sorted = score;
        sort(sorted.rbegin(), sorted.rend());
        
        unordered_map<int, string> rank;
        if (n >= 1) rank[sorted[0]] = "Gold Medal";
        if (n >= 2) rank[sorted[1]] = "Silver Medal";
        if (n >= 3) rank[sorted[2]] = "Bronze Medal";
        for (int i = 3; i < n; i++)
            rank[sorted[i]] = to_string(i + 1);
        
        vector<string> res;
        for (int s : score) res.push_back(rank[s]);
        return res;
    }
};

void print(vector<string> v) {
    cout << "[";
    for (int i = 0; i < v.size(); i++) cout << v[i] << (i+1

Đầu vào / Đầu ra

Input: {2,5,3,1,0}
Output: [Bronze Medal, Gold Medal, Silver Medal, 4, 5]