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