721. Accounts Merge

Accounts Merge (LeetCode 721) is a Medium Data Structures and Algorithms interview problem you can solve, run and submit on Thita.ai. It belongs to the Graph Traversal Patterns (DFS & BFS) pattern, in the Union-Find (Disjoint Set Union - DSU) subpattern.

How to solve Accounts Merge

Accounts Merge is a Union-Find problem, part of Graph Traversal Patterns (DFS & BFS). Master Union-Find data structure with path compression and union by rank for connectivity problems.

Work towards the solution in these steps:

  1. For every pair of emails in the same account, draw an edge between those emails. The problem is about enumerating the connected components of this graph.

The reference solution runs in O(N * K * log K) time and O(T) space.

The Accounts Merge solution and editorial walks through the full approach with reference code.

Problem statement

Given a list of accounts where each element accounts[i] is a list of strings, where the first element accounts[i][0] is a name, and the rest of the elements are emails representing emails of the account.

Now, we would like to merge these accounts. Two accounts definitely belong to the same person if there is some common email to both accounts. Note that even if two accounts have the same name, they may belong to different people as people could have the same name. A person can have any number of accounts initially, but all of their accounts definitely have the same name.

After merging the accounts, return the accounts in the following format: the first element of each account is the name, and the rest of the elements are emails in sorted order. The accounts themselves can be returned in any order.

Example 1:

Input: accounts = [["John","johnsmith@mail.com","johnnewyork@mail.com"],["John","johnsmith@mail.com","john00@mail.com"],["Mary","mary@mail.com"],["John","johnnybravo@mail.com"]] Output: [["John","john00@mail.com","johnnewyork@mail.com","johnsmith@mail.com"],["Mary","mary@mail.com"],["John","johnnybravo@mail.com"]] Explanation: The first and second John's are the same person as they have the common email "johnsmith@mail.com". The third John and Mary are different people as none of their email addresses are used by other accounts. We could return these lists in any order, for example the answer [['Mary', 'mary@mail.com'], ['John', 'johnnybravo@mail.com'], ['John', 'john00@mail.com', 'johnnewyork@mail.com', 'johnsmith@mail.com']] would still be accepted.

Example 2:

Input: accounts = [["Gabe","Gabe0@m.co","Gabe3@m.co","Gabe1@m.co"],["Kevin","Kevin3@m.co","Kevin5@m.co","Kevin0@m.co"],["Ethan","Ethan5@m.co","Ethan4@m.co","Ethan0@m.co"],["Hanzo","Hanzo3@m.co","Hanzo1@m.co","Hanzo0@m.co"],["Fern","Fern5@m.co","Fern1@m.co","Fern0@m.co"]] Output: [["Ethan","Ethan0@m.co","Ethan4@m.co","Ethan5@m.co"],["Gabe","Gabe0@m.co","Gabe1@m.co","Gabe3@m.co"],["Hanzo","Hanzo0@m.co","Hanzo1@m.co","Hanzo3@m.co"],["Kevin","Kevin0@m.co","Kevin3@m.co","Kevin5@m.co"],["Fern","Fern0@m.co","Fern1@m.co","Fern5@m.co"]]

Constraints:

- 1 <= accounts.length <= 1000

- 2 <= accounts[i].length <= 10

- 1 <= accounts[i][j].length <= 30

- accounts[i][0] consists of English letters.

- accounts[i][j] (for j > 0) is a valid email.

Topics and companies

Topics: Array, Hash Table, String, Depth-First Search, Breadth-First Search, Union Find, Sorting.

Reported in interviews at Facebook, Google, Amazon, Microsoft, Twitter, LinkedIn.

How to practise Accounts Merge on Thita.ai

Starter code is provided in C, C#, C++, Go, Java, JavaScript and Python. Your solution runs against 5 test cases for this problem, with the AI coach available for a hint when you are stuck rather than a finished answer. The reference solution runs in O(N * K * log K) time and O(T) space.

Open Accounts Merge in the code editor, or read the Accounts Merge editorial for a worked solution with its approach and complexity analysis.

Where Accounts Merge sits in the DSA pattern sheet

Problems related to Accounts Merge

Other problems that use the same Union-Find (Disjoint Set Union - DSU) and Graph Traversal Patterns (DFS & BFS) techniques:

Accounts Merge FAQ

What is the LeetCode number of Accounts Merge?

Accounts Merge is LeetCode problem 721, rated Medium.

What pattern is used to solve Accounts Merge?

Accounts Merge is a Union-Find problem. It belongs to the Graph Traversal Patterns (DFS & BFS) pattern, in the Union-Find (Disjoint Set Union - DSU) subpattern.

What is the time complexity of Accounts Merge?

The reference solution runs in O(N * K * log K) time and O(T) space.

Which companies ask Accounts Merge?

Accounts Merge has been reported in interviews at Facebook, Google, Amazon, Microsoft, Twitter, LinkedIn.

Preparing this workspace.