LeetCode 721. Fusión de cuentas (búsqueda combinada)

Directorio de artículos

1. Título

Dada una lista de cuentas, cada elemento accounts[i]es una lista de cadenas, donde el primer elemento accounts[i][0]es el nombre de (nombre), los elementos restantes son correos electrónicos que indican la dirección de correo electrónico de la cuenta.

Ahora queremos fusionar estas cuentas.
Si dos cuentas tienen algunas direcciones de correo electrónico en común , las dos cuentas deben pertenecer a la misma persona .
Tenga en cuenta que incluso si dos cuentas tienen el mismo nombre , pueden pertenecer a diferentes personas, porque las personas pueden tener el mismo nombre.
Una persona puede tener inicialmente cualquier número de cuentas, pero todas sus cuentas tienen el mismo nombre.

Después de fusionar las cuentas, las cuentas se devuelven en el siguiente formato: el primer elemento de cada cuenta es el nombre y los elementos restantes son las direcciones de correo electrónico en orden .
Las cuentas en sí pueden devolverse en cualquier orden.

例子 1:
Input: 
accounts = [["John", "[email protected]", "[email protected]"], 
["John", "[email protected]"], 
["John", "[email protected]", "[email protected]"], 
["Mary", "[email protected]"]]

Output: [["John", '[email protected]', '[email protected]', '[email protected]'], 
 ["John", "[email protected]"], 
 ["Mary", "[email protected]"]]
 
Explanation: 
  第一个和第三个 John 是同一个人,因为他们有共同的电子邮件 "[email protected]"。 
  第二个 John 和 Mary 是不同的人,因为他们的电子邮件地址没有被其他帐户使用。
  我们可以以任何顺序返回这些列表,
  例如答案[['Mary''[email protected]']['John''[email protected]']['John''[email protected]''[email protected]''[email protected]']]
  仍然会被接受。

注意:
accounts的长度将在[11000]的范围内。
accounts[i]的长度将在[110]的范围内。
accounts[i][j]的长度将在[130]的范围内。

Fuente: LeetCode Enlace: https://leetcode-cn.com/problems/accounts-merge Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

2. Resolución de problemas

class dsu
{
    
    
public:
    unordered_map<string,string> f;
    dsu(vector<vector<string>>& accounts)
    {
    
    
        for(int i = 0; i < accounts.size(); ++i)
        {
    
    
            for(int j = 1; j < accounts[i].size(); ++j)
            {
    
    
                if(!f.count(accounts[i][j]))
                    f[accounts[i][j]] = accounts[i][1];
                        //以第一个邮件作为代表
                else
                    merge(accounts[i][j], accounts[i][1]);
                    //有邮件出现过,合并该邮件和当前邮件代表
            }
        }
    }
    void merge(string& a, string& b)
    {
    
    
        string fa = find(a), fb = find(b);
        f[fa] = fb;
    }
    string find(string &a)
    {
    
    
        if(f[a] == a)
            return a;
        return f[a] = find(f[a]);
    }
};
class Solution {
    
    
public:
    vector<vector<string>> accountsMerge(vector<vector<string>>& accounts) {
    
    
        unordered_map<string, string> m;
        for(int i = 0; i < accounts.size(); ++i)
        {
    
    
            m[accounts[i][1]] = accounts[i][0];
            //邮件代表,归属的人名
        }
        dsu u(accounts);
        unordered_map<string, vector<string>> ans;
        string mail, name, tpmail;
        for(auto it = u.f.begin(); it != u.f.end(); ++it)
        {
    
       
            mail = it->first;
            tpmail = u.find(mail);//邮件代表tpmail
            ans[tpmail].push_back(mail);
        }
        vector<vector<string>> res(ans.size());
        int i = 0;
        for(auto it = ans.begin(); it != ans.end(); ++it, i++)
        {
    
    
            res[i] = it->second;//邮件列表
            sort(res[i].begin(), res[i].end());//排序
            res[i].insert(res[i].begin(), m[it->first]);//插入人名
        }
        return res;
    }
};

288 ms 26.9 MB


Mi dirección de blog de CSDN https://michael.blog.csdn.net/

Mantenga presionado o escanee el código QR para seguir mi cuenta oficial (Michael Amin), ¡vengan juntos, aprendan y progresen juntos!
Michael Amin

Supongo que te gusta

Origin blog.csdn.net/qq_21201267/article/details/108704420
Recomendado
Clasificación