ആപേക്ഷിക റാങ്കുകൾ ലീറ്റ്കോഡ് പരിഹാരം


വൈഷമ്യ നില എളുപ്പമായ
പതിവായി ചോദിക്കുന്നു ഗൂഗിൾ
ക്രമപ്പെടുത്തൽ

ആപേക്ഷിക റാങ്കുകളെ പ്രതിനിധീകരിക്കുന്ന ഒരു വെക്റ്റർ അല്ലെങ്കിൽ ഒരു കൂട്ടം സ്ട്രിംഗുകൾ തിരികെ നൽകാൻ ആപേക്ഷിക റാങ്കുകൾ ലീറ്റ്കോഡ് പരിഹാരം നമ്മോട് ആവശ്യപ്പെടുന്നു. ഞങ്ങൾക്ക് ഒരു നൽകിയിട്ടുണ്ട് ശ്രേണി അത്ലറ്റുകൾ നേടിയ സ്കോറിനെ പ്രതിനിധീകരിക്കുന്നു. റാങ്കുകൾ നൽകുന്നതിന് ഞങ്ങൾ നൽകിയ സ്കോർ അറേ ഉപയോഗിക്കുന്നു. മികച്ച 3 സ്ഥാനാർത്ഥികൾക്ക് ഒരു ചെറിയ മാറ്റമുണ്ട്. 1, 2, അല്ലെങ്കിൽ 3 എന്ന ലളിതമായ സംഖ്യകൾ നൽകുന്നതിനുപകരം, ഞങ്ങൾ സ്വർണം, വെള്ളി, വെങ്കലം എന്നിവ നൽകേണ്ടതുണ്ട്. മികച്ച 3 കാൻഡിഡേറ്റുകൾക്ക് പുറമെ, ഞങ്ങൾക്ക് 4 മുതൽ n വരെ ലളിതമായ നമ്പറുകൾ നൽകാം. കുറച്ച് ഉദാഹരണങ്ങൾ നോക്കാം.

ആപേക്ഷിക റാങ്കുകൾ ലീറ്റ്കോഡ് പരിഹാരം

[1, 2, 3]
["Bronze Medal", "Silver Medal", "Gold Medal"]

വിശദീകരണം: തന്നിരിക്കുന്ന അറേ അത്ലറ്റുകൾ നേടിയ സ്കോറുകളെ പ്രതിനിധീകരിക്കുന്നതിനാൽ. ഏറ്റവും കൂടുതൽ സ്‌കോർ നേടിയ അത്‌ലറ്റിന് സ്വർണ്ണ മെഡലും മറ്റും നൽകും. അങ്ങനെ ഞങ്ങൾ അത്ലറ്റിന് 3 സ്കോർ നേടി സ്വർണ്ണ മെഡലും 2 സ്കോർ നേടിയ അത്ലറ്റിന് സിൽവർ മെഡലും 1 സ്കോർ നേടി അത്ലറ്റിന് വെങ്കല മെഡലും നൽകി.

[5, 4, 3, 2, 1]
["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]

വിശദീകരണം: മികച്ച 3 സ്ഥാനാർത്ഥികൾക്ക് മെഡലുകൾ നൽകുകയും ബാക്കിയുള്ളവർക്ക് റാങ്ക് നൽകുകയും ചെയ്യുന്നതിനാൽ. അങ്ങനെ ഞങ്ങൾ മികച്ച 3 സ്ഥാനാർത്ഥികൾക്ക് മെഡലുകൾ നൽകി, കൂടാതെ റാങ്ക് 4, 5 അനുബന്ധ സ്ഥാനാർത്ഥികൾക്ക് നൽകി.

സമീപനം

ആപേക്ഷിക റാങ്കുകൾ ലീറ്റ്കോഡ് സൊല്യൂഷൻ മികച്ച 3 സ്ഥാനാർത്ഥികൾക്ക് മെഡലുകൾ നൽകാനും ബാക്കി സ്ഥാനാർത്ഥികൾക്ക് റാങ്കുകൾ നൽകാനും ആവശ്യപ്പെടുന്നു. തന്നിരിക്കുന്ന ശ്രേണി ക്രമീകരിക്കുക എന്നതാണ് ഒരാൾക്ക് ചിന്തിക്കാൻ കഴിയുന്ന ഏറ്റവും ലളിതമായ കാര്യം. എന്നാൽ യഥാർത്ഥ സൂചികകളിലേക്ക് ഞങ്ങൾ റാങ്കുകൾ നൽകേണ്ടതുണ്ട്. അതിനാൽ, തന്നിരിക്കുന്ന ശ്രേണി നേരിട്ട് അടുക്കുകയാണെങ്കിൽ, യഥാർത്ഥ സൂചികകൾ നഷ്‌ടപ്പെടും. റാങ്കുകൾ നിയോഗിക്കാൻ തീരുമാനിക്കാൻ കഴിയില്ല. യഥാർത്ഥ സൂചികകൾ‌ നഷ്‌ടപ്പെടുന്നില്ലെന്ന് ഉറപ്പാക്കുന്നതിന്, യഥാർത്ഥ സൂചികകൾ‌ സ്‌കോറുകൾ‌ക്കൊപ്പം സംഭരിക്കുന്ന ഒരു പുതിയ വെക്റ്റർ‌ അല്ലെങ്കിൽ‌ അറേ ഞങ്ങൾ‌ സൃഷ്‌ടിക്കുന്നു. ഞങ്ങൾ ഈ പുതിയ അറേ അല്ലെങ്കിൽ വെക്റ്റർ അടുക്കുന്നു. അടുക്കിയതിന് ശേഷം, ഞങ്ങൾ ബന്ധപ്പെട്ട സ്ഥാനാർത്ഥികൾക്ക് സ്വർണം, വെള്ളി, വെങ്കലം എന്നിവ അർഹിക്കുന്ന സ്ഥാനാർത്ഥികൾക്ക് 4 മുതൽ n വരെ റാങ്കുകൾ നൽകുന്നു. ഞങ്ങൾക്ക് ഇത് ചെയ്യാൻ കഴിയും, കാരണം ഞങ്ങളുടെ പുതിയ പരിഷ്‌ക്കരിച്ച അറേ അല്ലെങ്കിൽ വെക്റ്റർ അടുക്കുമ്പോൾ, യഥാർത്ഥ സൂചികകളും സംഭരിച്ച മൂല്യങ്ങൾക്ക് അനുസരിച്ച് അവയുടെ സ്ഥാനങ്ങൾ സ്വാപ്പ് ചെയ്യുന്നു.

ആപേക്ഷിക റാങ്കുകൾക്കായുള്ള കോഡ് ലീറ്റ്കോഡ് പരിഹാരം

ആപേക്ഷിക റാങ്കുകളുടെ ലീറ്റ്കോഡ് പരിഹാരത്തിനായുള്ള സി ++ കോഡ്

#include <bits/stdc++.h>
using namespace std;

vector<string> findRelativeRanks(vector<int>& nums) {
    vector<pair<int,int>> temp;
    int n = nums.size();
    for(int i=0;i<n;i++){
        temp.push_back(make_pair(nums[i], i));
    }
    sort(temp.rbegin(), temp.rend());
    vector<string> answer(n);
    answer[temp[0].second] = "Gold Medal";
    if(n>=2){
        answer[temp[1].second] = "Silver Medal";
    }
    if(n>=3){
        answer[temp[2].second] = "Bronze Medal";
    }
    for(int i=3;i<n;i++)
        answer[temp[i].second] = to_string(i+1);
    return answer;
}

int main(){
    vector<int> nums = {5, 4, 3, 2, 1};
    vector<string> answer = findRelativeRanks(nums);
    for(auto x: answer)cout<<x<<" ";
}
Gold Medal Silver Medal Bronze Medal 4 5

ജാവ കോഡ് ആപേക്ഷിക റാങ്കുകൾ ലീറ്റ്കോഡ് പരിഹാരം

import java.util.*;
import java.lang.*;
import java.io.*;

class Solution {
  
    public static String[] findRelativeRanks(int[] nums) {
        int n = nums.length;
        int[][] pair = new int[nums.length][2];
        for (int i = 0; i < n; i++) {
            pair[i][0] = nums[i];
            pair[i][1] = i;
        }
        
        Arrays.sort(pair, (a, b) -> (b[0] - a[0]));
        
        String[] result = new String[nums.length];
        result[pair[0][1]] = "Gold Medal";
        if(n>=2)
            result[pair[1][1]] = "Silver Medal";
        if(n>=3)
            result[pair[2][1]] = "Bronze Medal";
        for (int i = 3; i < nums.length; i++) {
            result[pair[i][1]] = Integer.toString(i+1);
        }

        return result;
    }
    
  public static void main (String[] args) throws java.lang.Exception{
    int[] nums = {5, 4, 3, 2, 1};
    String[] answer = findRelativeRanks(nums);
    for(int i=0;i<5;i++)
      System.out.print(answer[i] + " ");
  }
}
Gold Medal Silver Medal Bronze Medal 4 5

സങ്കീർണ്ണത വിശകലനം

സമയ സങ്കീർണ്ണത

O (NlogN), സോർട്ടിംഗിന് O (NlogN) സമയം ആവശ്യമാണ്, ഇവിടെ N എന്നത് അയോൺ വെക്റ്റർ അല്ലെങ്കിൽ അറേ അടുക്കുന്ന മൂലകങ്ങളുടെ എണ്ണമാണ്.

ബഹിരാകാശ സങ്കീർണ്ണത

O (NlogN), O (NlogN) ഇടം എടുക്കുന്ന തരംതിരിക്കൽ ഞങ്ങൾ ഉപയോഗിച്ചതിനാൽ. സ്ഥല സങ്കീർണ്ണതയും സമയ സങ്കീർണ്ണതയ്ക്ക് തുല്യമാണ്.