Climbing the Leaderboard

  • + 0 comments

    C++ binary search solution:

    vector climbingLeaderboard(vector ranked, vector player) {

    //erase the ranked duplicates
    ranked.erase(unique(ranked.begin(), ranked.end()), ranked.end());
    
    vector<int> result={};
    for(int i=0; i<player.size(); i++){
        //for each player perform a binary search:
        int left=0,
        right=ranked.size()-1;
        int p = player.at(i);
        bool found = false;
        while(left<=right && !found){
            int mid = left + (right - left) / 2;
            if(ranked.at(mid) == p){
                result.push_back(mid+1);
                found = true;
            }          
            if(ranked.at(mid) > p){
                left = mid + 1;
            }
            else {
                right = mid - 1;
            }
        }
        if(!found){
            result.push_back(left+1);
            ranked.insert(ranked.begin()+left, p);
        }
    }
    return result;
    

    }