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