Leetcode—721. 账户合并【中等】

2025每日刷题(231)

Leetcode---721. 账户合并

实现代码

cpp 复制代码
class unionFind {
public:
    unionFind(int n): id(n), sz(n, 1) {
        iota(id.begin(), id.end(), 0);
    }

    void unionSize(const int& u, const int& v) {
        const int x = find(u);
        const int y = find(v);

        if(x == y) {
            return;
        }

        if(sz[x] < sz[y]) {
            sz[y] += sz[x];
            id[x] = y;
        } else {
            sz[x] += sz[y];
            id[y] = x;
        }
    }

    int find(const int &u) {
        return id[u] == u? u: id[u] = find(id[u]);
    }

private:
    vector<int> id;
    vector<int> sz;
};

class Solution {
public:
    vector<vector<string>> accountsMerge(vector<vector<string>>& accounts) {
        int n = accounts.size();
        vector<vector<string>> ans;
        
        // {email: index}
        unordered_map<string, int> mailtoIndex;
        // {index: {emails}}
        unordered_map<int, set<string>> indextoMails;

        unionFind uf(n);

        for(int i = 0; i < n; ++i) {
            const string& name = accounts[i][0];
            for(int j = 1; j < accounts[i].size(); ++j) {
                const string& email = accounts[i][j];
                const auto& it = mailtoIndex.find(email);
                if(it == mailtoIndex.end()) {
                    mailtoIndex[email] = i;
                } else {
                    uf.unionSize(i, it->second);
                }
            }
        }

        for(const auto& [email, index]: mailtoIndex) {
            indextoMails[uf.find(index)].insert(email);
        }

        for(const auto& [index, email]: indextoMails) {
            const string& name = accounts[index][0];
            vector<string> row{name};
            row.insert(row.end(), email.begin(), email.end());
            ans.push_back(row);
        }

        return ans;
    }
};

运行结果

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

相关推荐
_日拱一卒10 分钟前
LeetCode:除了自身以外数组的乘积
数据结构·算法·leetcode
计算机安禾15 分钟前
【数据结构与算法】第36篇:排序大总结:稳定性、时间复杂度与适用场景
c语言·数据结构·c++·算法·链表·线性回归·visual studio
unicrom_深圳市由你创科技19 分钟前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
SatVision炼金士21 分钟前
合成孔径雷达干涉测量(InSAR)沉降监测算法体系
算法
wuweijianlove24 分钟前
算法稳定性与数值误差传播研究的技术2
算法
无限进步_25 分钟前
【C++】电话号码的字母组合:从有限处理到通用解法
开发语言·c++·ide·windows·git·github·visual studio
计算机安禾1 小时前
【数据结构与算法】第35篇:归并排序与基数排序
c语言·数据结构·vscode·算法·排序算法·哈希算法·visual studio
C++ 老炮儿的技术栈1 小时前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt
爱码小白1 小时前
MySQL 单表查询练习题汇总
数据库·python·算法
橘颂TA1 小时前
【笔试】算法的暴力美学——牛客 NC213140 :除2!
c++·算法·结构与算法