አንጻራዊ ደረጃዎች Leetcode መፍትሔ


የችግር ደረጃ ቀላል
ውስጥ በተደጋጋሚ ተጠየቀ google
መደርደር

ችግሩ አንጻራዊ ሬንጅዎች ሌቲኮድ መፍትሔው አንፃራዊ ደረጃዎችን የሚወክሉ ቬክተር ወይም የከበሮ ገመድ እንዲመልሱልን ይጠይቃል። እኛ አንድ ተሰጥቶናል ደርድር በአትሌቶች የተገኘውን ውጤት ይወክላል ፡፡ ከዚያ ደረጃዎችን ለመመደብ የተሰጠውን የውጤት ድርድር እንጠቀማለን ፡፡ ለከፍተኛ 3 እጩዎች ትንሽ ለውጥ አለ ፡፡ በምትኩ 1 ፣ 2 ወይም 3 ቀላል ቁጥሮችን መመደብ ፣ የወርቅ ፣ የብር እና የነሐስ ሜዳሊያ መመደብ ያስፈልገናል ፡፡ ከከፍተኛዎቹ 3 እጩዎች ሌላ እኛ ከ 4 እስከ n ያሉትን ቀላል ቁጥሮች ልንሰጣቸው እንችላለን ፡፡ እስቲ ጥቂት ምሳሌዎችን እንመልከት ፡፡

አንጻራዊ ደረጃዎች Leetcode መፍትሔ

[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 እስከ ደረጃዎች ፣ ለሚገባቸው እጩዎች እንሰጣለን ፡፡ ይህንን ማድረግ እንችላለን ምክንያቱም አዲሱን የተቀየረውን ድርደራችንን ወይም ቬክተርን ስንለያይ የመጀመሪያዎቹ ኢንዴክሶች እንዲሁ ከተከማቹት እሴቶች ጋር የሚዛመዱ ቦታዎቻቸውን ይለዋወጣሉ ፡፡

ለዘመድ ደረጃዎች Leetcode መፍትሄ ኮድ

የ C ++ ኮድ ለዘመዶች ደረጃዎች Leetcode Solution

#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

የጃቫ ኮድ አንፃራዊ ደረጃዎች Leetcode Solution

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

ውስብስብነት ትንተና

የጊዜ ውስብስብነት

ኦ (NlogN) ፣ ምክንያቱም መደርደር የ O (NlogN) ጊዜ ይፈልጋል ፣ ኤን ደግሞ የቬክተር ወይም ድርድር የሚደረደርባቸው ንጥረ ነገሮች ብዛት ነው ፡፡

የቦታ ውስብስብነት

ኦ (NlogN) ፣ የ O (NlogN) ቦታ የሚወስድ ክፍፍልን ስለተጠቀምን ፡፡ የቦታ ውስብስብነት እንዲሁ እንደ ጊዜ ውስብስብነት ተመሳሳይ ነው።