ਸੰਬੰਧਿਤ ਰੈਂਕ ਲੈਟਕੋਡ ਹੱਲ


ਮੁਸ਼ਕਲ ਪੱਧਰ ਸੌਖੀ
ਅਕਸਰ ਪੁੱਛਿਆ ਜਾਂਦਾ ਹੈ ਗੂਗਲ
ਲੜੀਬੱਧ

ਸੰਬੰਧਤ ਰੈਂਕ ਲੈਟਕੋਡ ਸਲਿolutionਸ਼ਨ ਸਾਨੂੰ ਇਕ ਵੈਕਟਰ ਜਾਂ ਰਿਸ਼ਤੇਦਾਰ ਰੈਂਕ ਨੂੰ ਦਰਸਾਉਂਦੇ ਤਾਰਾਂ ਦੀ ਇਕ ਲੜੀ ਵਾਪਸ ਕਰਨ ਲਈ ਕਹਿੰਦਾ ਹੈ. ਸਾਨੂੰ ਇੱਕ ਦੇ ਨਾਲ ਮੁਹੱਈਆ ਕਰ ਰਹੇ ਹਨ ਐਰੇ ਜੋ ਐਥਲੀਟਾਂ ਦੁਆਰਾ ਪ੍ਰਾਪਤ ਕੀਤੇ ਅੰਕ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ. ਫਿਰ ਅਸੀਂ ਰੈਂਕ ਨਿਰਧਾਰਤ ਕਰਨ ਲਈ ਦਿੱਤੇ ਗਏ ਸਕੋਰ ਐਰੇ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ. ਚੋਟੀ ਦੇ 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

ਜਾਵਾ ਕੋਡ ਸੰਬੰਧੀ ਰੈਂਕ ਲੈਟਕੋਡ ਸਲਿ Sਸ਼ਨ

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) ਸਪੇਸ ਲੈਂਦਾ ਹੈ. ਪੁਲਾੜ ਦੀ ਜਟਿਲਤਾ ਵੀ ਸਮੇਂ ਦੀ ਜਟਿਲਤਾ ਵਾਂਗ ਹੀ ਹੈ.