当前位置: 首页 > news >正文

Leetcode 721.账户合并(hash+dfs)☆

思路:

最核心的地方在于如何合并?这里是通过具有相同的email进行账户的合并,这个相同的email类似于图中的共同节点将两个账户连接起来,所以将原来

账户名 -> 邮件1 邮件2.。。变成hash

邮件1  ->账户id1,账户id2。。

方便进行具有相同邮件的账户id进行合并,合并成一个新的mergedaccount再sort一下保存即可。

代码:

class Solution {
public: // 原本给的是 用户名1 邮箱1 邮箱2 ...// 这里类似于邮箱作为连接节点, 邮箱1 用户1 用户2 ...(深度搜索合并起来)-->变这样存储vector<vector<string>> accountsMerge(vector<vector<string>>& accounts) {int n = accounts.size();unordered_map<string, vector<int>> mp;for(int i = 0; i < accounts.size(); i ++)for(int j = 1; j < accounts[i].size(); j ++)mp[accounts[i][j]].push_back(i); // 映射到账户记录上vector<bool> st(n, false);              // 访问过的账户状态数组unordered_set<string> cur_emails;       // 当前账户的所有emails集合// 定义匿名函数dfsfunction<void(int)> dfs = [&](int u) -> void {          st[u] = true;                       // 打上访问过的标记for(int i = 1; i < accounts[u].size(); i ++){const string& t = accounts[u][i];if(cur_emails.count(t) == 0){   // 没加过才需要加入cur_emails.insert(t);       // 查询拥有此email的其他账户的邮箱信息for(int idx: mp[t])if(!st[idx])    dfs(idx);}}};vector<vector<string>> mergedAccount;for(int i = 0; i < n; i ++){if(st[i])   continue;   // 深搜后的账户记得跳过cur_emails.clear();     // 每次进入dfs前记得清空dfs(i);                 // 得到结果cur_emailsvector<string> t;       // 合并后的记录t.push_back(accounts[i][0]); // 先插入第一个元素, 名字t.insert(t.end(), cur_emails.begin(), cur_emails.end());// 在t的末尾依次插入cur_emails的每一个元素sort(t.begin() + 1, t.end());mergedAccount.push_back(t);}return mergedAccount;}
};

其他:

①匿名函数的使用:

C++匿名函数lambda使用(闭包)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zjjaibc/article/details/140640969?spm=1001.2014.3001.5501

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [MySQL]02 存储引擎与索引,锁机制,SQL优化
  • Python:Flask自定义URL路由参数过滤器
  • 电缆故障精准定位系统
  • 在CentOS中配置三个节点之间相互SSH免密登陆
  • 极狐GitLab如何启用和配置PlantUML?
  • 【Django】在vscode中运行调试Django项目(命令及图形方式)
  • 观成科技:活跃窃密木马TriStealer加密通信分析
  • setsockopt选项对tcp速度
  • HTTP 协议浅析
  • k8s 公共服务
  • 问题处理--No such file or directory
  • Springboot+Maven多模块项目开发
  • 构建稳固与安全的网络环境:从微软蓝屏事件看软件更新流程与应急响应
  • vue3中Composition API写法 <script setup>标签中哪些可以不用导入即可使用?
  • js箭头函数与普通函数的this指向问题
  • [PHP内核探索]PHP中的哈希表
  • create-react-app做的留言板
  • ES10 特性的完整指南
  • ES6系列(二)变量的解构赋值
  • Hibernate最全面试题
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Vue.js-Day01
  • Vue官网教程学习过程中值得记录的一些事情
  • 前端学习笔记之观察者模式
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 怎么把视频里的音乐提取出来
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #QT(一种朴素的计算器实现方法)
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (145)光线追踪距离场柔和阴影
  • (52)只出现一次的数字III
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (一) 初入MySQL 【认识和部署】
  • (杂交版)植物大战僵尸
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)ObjectiveC 深浅拷贝学习
  • (转)visual stdio 书签功能介绍
  • (转)菜鸟学数据库(三)——存储过程
  • (转)树状数组
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core 项目指定SDK版本
  • .NET 分布式技术比较
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .net开发时的诡异问题,button的onclick事件无效
  • /var/lib/dpkg/lock 锁定问题
  • @AutoConfigurationPackage的使用
  • @PostConstruct 注解的方法用于资源的初始化
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ IO.File ] FileSystemWatcher
  • []指针
  • [5] CUDA线程调用与存储器架构