Data Structures19 sections · 729 units
Open in Course

Accounts Merge Approach

Emails as nodes

Strategy:

1.1. Map each email to an account index

2.2. If an email appears in multiple accounts, union those accounts

3.3. Collect all emails for each root account

function accountsMerge(accounts):
    uf = new UnionFind(accounts.length)
    emailToId = {}

    // Map emails to account indices
    for i from 0 to accounts.length - 1:
        account = accounts[i]
        for each email in account[1:]:
            if email in emailToId:
                uf.union(i, emailToId[email])
            emailToId[email] = i

    // Collect emails by root
    rootToEmails = empty map of sets
    for each (email, id) in emailToId:
        root = uf.find(id)
        rootToEmails[root].add(email)

    // Build result
    result = []
    for each (root, emails) in rootToEmails:
        name = accounts[root][0]
        result.add([name] + sort(emails))
    return result