C++ 中的相对排名
假设我们有一份 N 名运动员的成绩列表,我们需要找到他们的相对排名,以及前三名运动员的排名,他们将获得不同的奖牌:“金牌”、“银牌”和“铜牌”。
因此,如果输入类似于 [2,5,3,1,0],则输出将是 [铜牌,金牌,银牌,4,5]
为了解决这个问题,我们将遵循以下步骤:
如果 nums 的大小为 1,则:
返回 "金牌"
如果 nums 的大小为 2,则:
如果 nums[0] > nums[1],则:
返回 "金牌","银牌"
否则
返回 "银牌","金牌"
定义一个数组 v
定义一个数组 vec
对于初始化 i := 0,当 i < nums 的大小,更新 (i 加 1),执行:
将 nums[i] 插入 v 的末尾
对数组 v 进行排序
反转数组 v
定义一个映射 mp
如果 nums 的大小 > 2,则:
将 {v[0], "金牌"} 插入 mp
将 {v[1], "银牌"} 插入 mp
将 {v[2], "铜牌"} 插入 mp
对于初始化 i := 3,当 i < v 的大小,更新 (i 加 1),执行:
将 {v[i], i + 1 作为字符串} 插入 mp
对于初始化 i := 0,当 i < nums 的大小,更新 (i 加 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, ]
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP