समस्या विवरण
मान लीजिए हमारे पास N एथलीट्स के स्कोर की सूची है, हमें उनकी सापेक्ष रैंक ज्ञात करनी है और शीर्ष तीन उच्चतम स्कोर वाले लोगों को अलग-अलग पदक मिलेंगे: "Gold", "Silver" और "Bronze"।
उदाहरण
यदि इनपुट है: [2,5,3,1,0], तो आउटपुट होगा [Bronze, Gold, Silver, 4, 5]
हल करने का दृष्टिकोण
इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:
- यदि nums का आकार 1 है, तो "Gold" लौटाएं
- यदि nums का आकार 2 है:
- यदि nums[0] > nums[1], तो "Gold", "Silver" लौटाएं
- अन्यथा "Silver", "Gold" लौटाएं
- एक सरणी v परिभाषित करें
- एक सरणी vec परिभाषित करें
- i := 0 से आरंभ करें, जब i < nums का आकार, i को 1 से बढ़ाते हुए:
- nums[i] को v के अंत में डालें
- सरणी v को सॉर्ट करें
- सरणी v को रिवर्स करें
- एक मैप mp परिभाषित करें
- यदि nums का आकार > 2:
- {v[0], "Gold"} को mp में डालें
- {v[1], "Silver"} को mp में डालें
- {v[2], "Bronze"} को mp में डालें
- i := 3 से आरंभ करें, जब i < v का आकार, i को 1 से बढ़ाते हुए:
- {v[i], i+1 को स्ट्रिंग में} को mp में डालें
- i := 0 से आरंभ करें, जब i < nums का आकार, i को 1 से बढ़ाते हुए:
- mp[nums[i]] को vec के अंत में डालें
- vec लौटाएं
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<string> 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;
}
};
int main() {
Solution ob;
vector<int> v = {2,5,3,1,0};
print_vector(ob.findRelativeRanks(v));
return 0;
}
इनपुट
{2,5,3,1,0}
आउटपुट
[Bronze, Gold, Silver, 4, 5, ]