假设我们有N个运动员的得分列表,我们必须找到他们的相对排名以及得分最高的前三名的人,他们将获得不同的奖牌:“金牌”,“银牌”和“铜牌”。
因此,如果输入类似于[2,5,3,1,0],则输出将为[Bronze,Gold,Silver,4,5]
为了解决这个问题,我们将遵循以下步骤-
如果nums的大小等于1,则-
返回“金牌”
如果nums的大小等于2,则-
返回“银”,“金”
返回“金”,“银”
如果nums [0]> nums [1],则-
除此以外
定义数组v
D定义数组vec
对于初始化i:= 0,当i <nums大小时,更新(将i增加1),执行-
在v的末尾插入nums [i]
对数组v排序
反转数组v
定义一张映射mp
如果nums的大小> 2,则-
在vec的末尾插入mp [nums [i]]
将{v [i],i + 1作为字符串}插入mp
将{v [0],“ Gold”}插入mp
将{v [1],“ Silver”}插入mp
将{v [2],“ Bronze”}插入mp
对于初始化i:= 3,当i <v的大小时,更新(将i增加1),执行-
对于初始化i:= 0,当i <nums大小时,更新(将i增加1),执行-
返回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, ]