Climbing the Leaderboard HackerRank Solution in C, C++, Java, Python

An arcade game player wants to climb to the top of the leaderboard and track their ranking. The game uses Dense Ranking, so its leaderboard works like this:

  • The player with the highest score is ranked number  on the leaderboard.
  • Players who have equal scores receive the same ranking number, and the next player(s) receive the immediately following ranking number.

Example

The ranked players will have ranks , and , respectively. If the player’s scores are  and , their rankings after each game are  and . Return .

Function Description

Complete the climbingLeaderboard function in the editor below.

climbingLeaderboard has the following parameter(s):

  • int ranked[n]: the leaderboard scores
  • int player[m]: the player’s scores

Returns

  • int[m]: the player’s rank after each new score

Input Format

The first line contains an integer , the number of players on the leaderboard.
The next line contains  space-separated integers , the leaderboard scores in decreasing order.
The next line contains an integer, , the number games the player plays.
The last line contains  space-separated integers , the game scores.

 

Climbing the Leaderboard HackerRank Solution in C

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
#define ll long long int
int main(){
    ll n,m,i,j,an[200006],am[200005],ar[200005];
    scanf("%lld",&n);
    for(i=0;i<n;i++)
        {
        scanf("%lld",an+i);
    }
    ar[0]=1;
    for(i=1;i<n;i++)
        {
        if(an[i]==an[i-1])
            ar[i]=ar[i-1];
        else
            ar[i]=ar[i-1]+1;
    }
    ar[n]=ar[n-1]+1;
    scanf("%lld",&m);
    for(i=0;i<m;i++)
        {
        scanf("%lld",am+i);
        
    }
    i=n-1;j=0;
    while(j<m)
        {
        while(an[i]<am[j] && i>0)
            i--;
        if(an[i]==am[j])
        printf("%lld\n",ar[i]);
        else if(an[i]>am[j])
            printf("%lld\n",ar[i]+1);
            else{
            if(ar[i]==1)
              printf("1\n");
            else
                printf("%lld\n",ar[i]-1);}  
        j++;
    }
    return 0;
}

Climbing the Leaderboard HackerRank Solution in C++

#define _CRT_SECURE_NO_WARNINGS

#pragma comment(linker, "/STACK:67108864")

#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <algorithm>
#include <functional>
#include <numeric>
#include <memory.h>
#include <time.h>

using namespace std;

typedef long long LL;


int n, m;

int main()
{
    scanf("%d", &n);
    set<int> s;
    for (int i = 0; i < n; ++i)
    {
        int x;
        scanf("%d", &x);
        s.insert(x);
    }
    scanf("%d", &m);
    vector<int> v(s.begin(), s.end());
    for (int i = 0; i < m; ++i)
    {
        int x;
        scanf("%d", &x);
        int pos = upper_bound(v.begin(), v.end(), x) - v.begin();
        printf("%d\n", (int)v.size() - pos + 1);
    }
    return 0;
}

Climbing the Leaderboard HackerRank Solution in Java

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        List<Integer> scores = new ArrayList<Integer>();
        for (int i = 0; i < n; i++){
            int score = in.nextInt();
            if (scores.size() == 0 || scores.get(scores.size() - 1) != score)
                scores.add(score);
        }
        int m = in.nextInt();
        for (int i = 0; i < m; i++){
            int score = in.nextInt();
            int min = 0;
            int max = scores.size();
            while (max > min){
                int mid = (min + max) / 2;
                if (scores.get(mid) <= score)
                    max = mid;
                else
                    min = mid + 1;
            }
            System.out.println(min + 1);
        }
    }
}

Climbing the Leaderboard HackerRank Solution in Python

#!/bin/python

import sys

def compute_sums(A, B):
    i = 0
    y = A[i]
    s = 0

    result = {}
    for x in B:
        while x > y:
            result[y] = s
            i += 1
            if i >= len(A):
                return result
            
            y = A[i]
        s += 1
    for y in A[i:]:
        result[y] = s
    return result



n = int(raw_input().strip())
A = map(int,raw_input().strip().split(' '))
m = int(raw_input().strip())
B = map(int,raw_input().strip().split(' '))
A = list(set(A))
A.sort()

l = compute_sums(B,A)
for i in B:
    print len(A)-l[i]+1

 

Leave a Comment