N명의 선수 점수 목록이 있다고 가정하고 상대 순위와 상위 3개 최고 점수를 가진 사람들을 찾아야 합니다. "금", "은" 및 "동" 메달은 서로 다릅니다.
따라서 입력이 [2,5,3,1,0]과 같으면 출력은 [Bronze,Gold,Silver,4,5]
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
숫자의 크기가 1과 같으면 -
-
"골드" 반환
-
-
숫자의 크기가 2와 같으면 -
-
nums[0]> nums[1]이면 -
-
"골드", "실버" 반환
-
-
그렇지 않으면
-
"실버", "골드" 반환
-
-
-
배열 정의 v
-
DDefine 배열 vec
-
initialize i :=0의 경우, i <숫자의 크기일 때 업데이트(i를 1만큼 증가), 수행 -
-
v
끝에 nums[i] 삽입
-
-
배열 v
정렬 -
배열 v
반전 -
하나의 맵 MP 정의
-
숫자의 크기가 2보다 크면 -
-
mp에 {v[0], "Gold" } 삽입
-
mp에 {v[1], "Silver" } 삽입
-
mp에 {v[2], "Bronze" } 삽입
-
initialize i :=3의 경우, i
-
mp에 { v[i], i + 1 as string} 삽입
-
-
initialize i :=0의 경우, i <숫자의 크기일 때 업데이트(i를 1만큼 증가), 수행 -
-
vec
끝에 mp[nums[i]] 삽입
-
-
-
반환 벡터
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#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, ]