LeetCode721 账户合并
题解
对于\(vector<vector<string>> accounts\),我们定义\(accounts[i]\)为一个列表项。对于\(accounts\)中的一条列表项,第一个元素代表用户名称,其余元素均代表该用户所拥有的邮箱地址。如下图所示,是一个具有三条列表项的\(accounts\):

对于一个用户名称,其拥有的邮箱地址,不妨视为一个不包含重复元素的集合。当且仅当列表项之间的邮箱地址集合有交集时,可以合并列表项。
不妨假设\(n = accounts.size()\),那么本质就是问这\(n\)条列表项在所有具有交集的列表项进行合并后的集合信息。
可以用并查集维护\(n\)个不同的集合。
对于第\(i(0 \leq i \leq n-1)\)条列表项,易知该条列表项的邮箱地址都曾出现于第\(i\)个邮箱地址集合中。
那么不妨用\(map<string, vector<int>>\)维护邮箱地址出现过的集合序号,结果只需要将全部集合序号所指的集合合并为一个集合,最后的结果就是所求答案。
例如上述给出的图片,其集合序号信息如下:
邮箱地址1
1
邮箱地址2
1 2
邮箱地址3
1
邮箱地址4
2
邮箱地址5
2
邮箱地址6
3
由邮箱地址2 {1, 2},可知集合1和集合2是具有交集的,可以合并,并且可以证明,除此之外再无其他集合有交集。进行合并后,集合信息为:
- 1(2) {邮箱地址1, 邮箱地址2, 邮箱地址3, 邮箱地址4, 邮箱地址5};
- 3 {邮箱地址6}。
参考代码
class Solution {
public:
void merge(vector<int> &bcj, int a, int b) {
bcj[find(bcj, a)] = find(bcj, b);
}
int find(vector<int> &bcj, int x) {
while (x != bcj[x]) {
return bcj[x] = find(bcj, bcj[x]);
}
return x;
}
vector<vector<string>> accountsMerge(vector<vector<string>>& accounts) {
vector<vector<string>> ans;
map<string, vector<int>> mp;
int n = accounts.size();
vector<int> bcj(n);
iota(bcj.begin(), bcj.end(), 0);
for (int i = 0; i < n; ++ i) {
for (int j = 1; j < accounts[i].size(); ++ j) {
mp[accounts[i][j]].emplace_back(i);
}
}
for (auto &it: mp) {
vector<int> &v = it.second;
int len = v.size();
for (int i = 1; i < len; ++ i) {
merge(bcj, v[0], v[i]);
}
}
map<int, set<string>> res;
for (int i = 0; i < n; ++ i) {
int anc = find(bcj, i);
for (int j = 1; j < accounts[i].size(); ++ j) {
res[anc].insert(accounts[i][j]);
}
}
for (auto &it: res) {
vector<string> vec;
vec.emplace_back(accounts[it.first][0]);
vec.insert(vec.end(), it.second.begin(), it.second.end());
ans.emplace_back(vec);
}
return ans;
}
};
LeetCode721 账户合并的更多相关文章
- [Swift]LeetCode721. 账户合并 | Accounts Merge
Given a list accounts, each element accounts[i] is a list of strings, where the first element accoun ...
- Java实现 LeetCode 721 账户合并(并查集)
721. 账户合并 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails ...
- 【leetcode】721. Accounts Merge(账户合并)
Given a list of accounts where each element accounts[i] is a list of strings, where the first elemen ...
- [LeetCode] Accounts Merge 账户合并
Given a list accounts, each element accounts[i] is a list of strings, where the first element accoun ...
- [LeetCode] 721. Accounts Merge 账户合并
Given a list accounts, each element accounts[i] is a list of strings, where the first element accoun ...
- Leetcode(712)-账户合并
给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该帐户的邮箱地址 ...
- [leetcode]721. Accounts Merge账户合并
Given a list accounts, each element accounts[i] is a list of strings, where the first element accoun ...
- [转]passport.js学习笔记
概述 passport.js是Nodejs中的一个做登录验证的中间件,极其灵活和模块化,并且可与Express.Sails等Web框架无缝集成.Passport功能单一,即只能做登录验证,但非常强大, ...
- Swift LeetCode 目录 | Catalog
请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift 说明:题目中含有$符号则为付费题目. 如 ...
- 【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)
一.微信联合登录是怎么登录的,有几种登录方式:微信联合登录和微信授权登录[授权登录(非静默授权)与静默授权] [主动授权]:需要用户确认登录,这样可以通过用户的个人确认,获取用户全面的信息,无论是否关 ...
随机推荐
- 多表查询 —— 内连接&外连接&子查询
连接查询 内连接 1.查询语法 -- 隐式内连接 select 字段列表 from 表1, 表2... where 条件; -- 显式内连接 select 字段列表 from 表1 [INNER] j ...
- MyBatis——案例——查询-查询详情
查询-查询详情 (根据id获取商品全部信息(即商品对象)) 1.编写Mapper接口方法:Brand selectById(int id); 2.编写SQL ...
- [TK] 寻宝游戏
在树上标记若干个点,求出从某个点走过全部点并回到该点的最小路径. 有多次询问,每次询问只改变一个点. 首先是一个暴力的思路. 会发现,从标记点中的其中一个开始走,结果一定更优,并且无论从哪个点开始走, ...
- foobar2000 v2.1.2 汉化版(更新日期: 2024.02.27)
新春佳节,送上一份新年礼物,祝您在新的一年里,万事如意,心想事成,身体健康,事业有成,财源广进,家庭和睦,笑容常开,好运连连. foobar2000 v2.1.2 汉化版 ---------- ...
- 2021年3月国产数据库排行榜:OceanBase勇夺亚军 神舟挺进20强!
1 新春排行 2021年3月榜单新鲜出炉,同2月相比,本月榜单中十强产品还是原来的面孔,其中3款产品取得了新的名次,榜单座次调整超过半数.前三甲仍然是TiDB.OceanBase.达梦. 冠军:TiD ...
- KubeSphere 社区双周报 | KubeSphere 多项更新 | 2023.06.23-07.06
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- KubeSphere 接入外部 Elasticsearch 最佳实践
作者:张坚,科大讯飞开发工程师,云原生爱好者. 大家好,我是张坚.今天来聊聊如何在 KubeSphere 中集成外置的 ES 组件. KubeSphere 在安装完成时候可以启用日志组件,这样会安装 ...
- 用easyVget下载B站油管视频
B站油管等视频平台简直就是无所不有的宝库,动漫.番剧.纪录片.科普,更有海量的学习资源,可以极大地满足你的视觉欲和求知欲. 作为一只视频仓鼠,我热衷于下载自己感兴趣的视频到本地,不用担心视频被和谐.不 ...
- Oracle 11.2 RAC 删除节点
软硬件环境:与上一篇文章一致: 一般对 CRS 层面数据结构做重要操作之前一定要先备份 OCR [root@vastdata4 ~]# ocrconfig -manualbackup vastdat ...
- vite 设置网络代理
参考文档:vite 官网.node-http-proxy 完整示例: export default defineConfig({ server: { proxy: { // 字符串简写写法 '/foo ...