LeetCode - Rank Teams by Votes

Solution to LeetCode: Rank Teams by Votes

Solution

  • Use a map of arrays (2 dimensional data structure) to accumulate the vote counts per position per team
  • Sort the map based on the vote counts per position and team name
/* Solution to LeetCode: Rank Teams by Votes
 * URL: https://leetcode.com/problems/rank-teams-by-votes/
 */

const rankTeams = (votes) => {
    // map to hold vote count per team
    const rankings = new Map()

    // loop through each vote
    for (const vote of votes) {
        //console.log(vote)

        // loop through each team position in a vote
        for (let position = 0; position < vote.length; position++) {
            const team = vote[position]

            // update the vote count for the team at the position
            let ranking = rankings.get(team)

            // create an empty array, if not already
            if (!ranking) ranking = new Array(vote.length).fill(0)

            // record the vote
            ranking[position]++

            // console.log(team, ranking)
            rankings.set(team, ranking)
        }
    }

    // sort the teams based on the votes
    const sorted = [...rankings].sort((a, b) => {
        const rankingA = a[1]
        const rankingB = b[1]

        for (let position = 0; position < rankingA.length; position++) {
            // if vote count is same, check for next position
            if (rankingA[position] == rankingB[position]) continue

            // return team with highest vote count
            else return rankingB[position] - rankingA[position]
        }

        // break tie based on team name
        return a[0] - b[0]
    })

    // join the sorted teams
    const result = sorted.map((ranking) => ranking[0]).join('')

    // console.log(result)

    return result

}

// test case
console.assert(rankTeams(["ABC", "ACB", "ABC", "ACB", "ACB"]) === 'ACB')

// test case
console.assert(rankTeams(["WXYZ","XYZW"]) === 'XWYZ')

// test case
console.assert(rankTeams(["ZMNAGUEDSJYLBOPHRQICWFXTVK"]) === 'ZMNAGUEDSJYLBOPHRQICWFXTVK')

Sources List for Debian 8 (Jessie)

Debian 8 has been superseded by Debian 9 (stretch). Regular security support updates have been discontinued as of June 17th, 2018. Jessie also benefits from Long Term Support (LTS) until the end of June 2020. The LTS is limited to i386, amd64, armel and armhf.