题目要求我们整理一个通讯录,通讯录中的每个联系人包含姓名和若干个手机号。如果两个联系人有相同的手机号,则认为他们是同一个人,需要将他们合并为一个联系人。在合并时,如果发现姓名不同,则保留字典序较小的姓名,所有手机号合并后按ASCII码升序排列。输入包括通讯录的记录数量num(范围为1到1000),后续每一行表示一个联系人,包含姓名和若干手机号(每个手机号不超过10个,长度为1到10位)。输出要求合并后的联系人列表,并按ASCII码顺序输出姓名及其手机号。
1.基于共享电话号码的联系人属于同一组的思路,我们可以先使用哈希表将电话号码映射到对应的联系人编号列表上,然后使用并查集将共享同一电话号码的联系人合并到同一组。
2.对于并查集里的每个组(用该集合中的root节点编号表示),我们需要找到字典序最小的联系人姓名和该组内的联系人的所有电话号码。
你有一个通讯录,其中每条联系人记录都由一个姓名和若干个手机号组成,且一个联系人可能登记多个手机号。
如果两条联系人记录存在至少一个相同的手机号,就判定它们属于同一个人。这种判定具有传递性:例如 A 与 B 共享某个手机号,B 与 C 共享另一个手机号,则 A、B、C 应认为是同一个联系人。
请对通讯录进行整理:将因共享手机号而关联的所有记录合并为一条合并后的联系人。重复号码只保留一次。若合并过程中出现多个不同姓名,则以字典序最小的姓名作为该联系人的姓名。
约束条件:
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册