• + 0 comments

    My solution in Java 8:

    class ClimbingLeaderboardResult {
    
        static Integer searchRanking(List<Integer> ranked, Integer score, int left, int right) {
            int mid = (left+right)/2;
            if (left >= right || ranked.get(mid).equals(score)) {
                if (ranked.get(mid) <= score) return mid;
                if (ranked.get(mid) > score) return mid+1;
            }
    
            return (
                    ranked.get(mid) < score ?
                            searchRanking(ranked, score, left, mid-1) :
                            searchRanking(ranked, score, mid+1, right)
            );
        }
    
        public static List<Integer> climbingLeaderboard(List<Integer> ranked, List<Integer> player) {
    
            List<Integer> board = new ArrayList<>();
            ranked = ranked.stream()
                    .distinct()
                    .collect(Collectors.toList());
    
            for (Integer playerScore: player) {
                int playerRank = searchRanking(ranked, playerScore, 0, ranked.size()-1);
                board.add(playerRank+1);
            }
            return board;
        }
    }