สมมติว่าเรามีรายชื่อนักกีฬา N คน เราต้องหาอันดับญาติและคนที่ได้คะแนนสูงสุด 3 อันดับแรก ซึ่งจะได้เหรียญรางวัลต่างกัน:"ทอง" "เงิน" และ "ทองแดง"
ดังนั้นหากอินพุตเป็น [2,5,3,1,0] ผลลัพธ์จะเป็น [Bronze,Gold,Silver,4,5]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ถ้าขนาดของ nums เท่ากับ 1 แล้ว −
-
คืน "ทอง"
-
-
ถ้าขนาดของ nums เท่ากับ 2 แล้ว −
-
ถ้า nums[0]> nums[1] แล้ว −
-
คืน "ทอง" "เงิน"
-
-
มิฉะนั้น
-
คืน "เงิน", "ทอง"
-
-
-
กำหนดอาร์เรย์ v
-
DDefine vec อาร์เรย์
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของ nums ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -
-
ใส่ nums[i] ต่อท้าย v
-
-
จัดเรียงอาร์เรย์ v
-
กลับอาร์เรย์ v
-
กำหนดหนึ่ง mp mp
-
ถ้าขนาดของ nums> 2 แล้ว −
-
แทรก {v[0], "Gold" } ลงใน mp
-
แทรก {v[1], "Silver" } ลงใน mp
-
แทรก {v[2], "Bronze" } ลงใน mp
-
สำหรับการเริ่มต้น i :=3 เมื่อฉัน <ขนาด v อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -
-
แทรก { v[i], i + 1 เป็นสตริง} ลงใน mp
-
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของ nums ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -
-
แทรก mp[nums[i]] ที่ส่วนท้ายของ 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, ]