LeetCode 721.账户合并 题解

华为OD机试-账户合并(java& c++& python & javascript & golang & c# & c) 阅读详情

题目信息

LeetoCode地址: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目理解

原题使用的是名称和账号的邮箱地址,好多字母,可能有些人会不太好理解。我换了一种场景:联想一下,诸如《魔兽世界》《地下城与勇士》这样的网络游戏,每个玩家都可以创建多个游戏角色,每个游戏角色的ID都是服务器唯一的。注意,玩家的姓名在现实生活中是完全可以重复的。

在下图上半部分里,有一些玩家: 两位周小董, 两位张小涵,他们都拥有一些游戏角色。

按照题目的意思,因为两个周小董都拥有角色《战斗至死》,所以这两个周小董其实同一个人,他们的游戏角色是可以直接合并,属于同一个人的。

相反的,因为两位张小涵的游戏角色都不重复,所以这是两位重名的玩家,他们的游戏角色是不应该合并的。

综上,如下图下半部分所示,最终周小董合并之后有三个游戏角色,而两位张小涵的游戏角色保持不变。

图1
图1

由于玩家合并之后,一定没有两位玩家拥有相同的角色,所以可以得出结论,所有的角色ID都是独一无二的,而不像合并前有重复。

解题思路

数组并查集+哈希表

我们已经知道最终合并之后是不存在重复的角色ID的,找到它们并确定哪个游戏角色属于哪个玩家是很简单的,使用HashMap就可以做到。问题的关键在于如何找到相同玩家的不同角色ID,并将他们合并。

首先,我们先给所有第一次出现角色ID按照从0开始递增的方式编号. 可以看到,我们总共有0到5也就是6个不重复的角色ID.

图2

要合并它们,我们可以换个思考方式。那就是除了利用玩家名字之外,还有没有别的办法表示一批角色ID是属于同一个人的?实际是有的!我们可以使用每个玩家的第一个角色作为这一批角色的父亲,或者叫做根。如果用图表示,就类似下面这样:

图3

现在,让我们聚焦到根是《0.一往无前》和《3.逍遥自在》的这两个树状结构。

图4

显而易见的,它们都拥有相同的《1.战斗至死》这个角色ID。想要将他们合并,也就是让这两个树状结构拥有相同的根。由于我们是按照从左到右的顺序遍历的,所以左边这棵树合并到右边这棵树是最自然的结果。如何做?以《1.战斗至死》举例,我们让它的根的根,等于第二棵树的根的根。

很多人要迷惑了啊,什么根的根的根。一个一个来看。第一个根是上图左侧的《1.战斗至死》的根,也就是《0.一往无前》。第二个根是上图左侧的《0.一往无前》的根,是它自己。第三个根,也就是我们在便利第二个周小董的游戏角色时,遇到的重复元素《1.战斗至死》的根,也就是《3.逍遥自在》。至此,两棵树会合并完成了。

最终状态就是下图的状态。

图4

现在让我们看看剩下两棵树

Java实现 LeetCode 721 账户合并(并查集) 721. 账户合并 给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该帐户的邮箱地址。 现在,我们想合并这些帐户。如果两个帐户都有一些共同的邮件地址,则两个帐户必定属于同一个人。请注意,即使两个帐户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的帐户,但其所有帐户都具有相同的名称。 合并帐户后,按以下格式返回帐户:每个帐户的第一个元素是名称,其余元素是按顺序排列的邮箱地址。accounts 本身可以以任意顺序返回 立即下载

相关推荐

【STC8A8K64S4A12开发板】—学习PWM脉冲宽度调制

版权声明:本文为博主原创文章,转载请附上原文出处链接。 文章目录前言一、硬件设计1.PWM脉冲宽度调制介绍2.STC8A8K64S4A12系列单片机PWM介绍3.PWM配置步骤二、软件设计1.PWM寄存器汇集2.寄存器解析2.1.PWM配置寄存器PWMCFG2.2.PWM控制寄存器PWMCR2.3.PWM中断标志寄存器2.4.PWM外部异常控制寄存器2.5.PWM时钟选择寄存器2.6.PWM触发ADC计数器寄存器2.7.PWM2翻转寄存器2.8.PWMn控制寄存器2.9.PWMn电平保持控制寄存器3.PW

qq_36139768的博客 5218

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 985

WRF和WPS模型在Ubuntu系统上的安装与常见问题解决指南

本文详细介绍了在Ubuntu系统上安装WRF和WPS模型的完整教程,涵盖系统环境配置、依赖库安装、源代码编译以及常见问题的解决方案。重点解决了WPS编译中intmath.f文件的修改、环境变量设置和编译器兼容性等关键难点,帮助用户高效部署气象研究与预报模型。

weixin_29213525的博客 382

K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority

在Kubernetes环境中使用自签名证书的私有Harbor镜像仓库时,常会遇到证书验证失败的问题。本文将详细讲解如何解决这个常见的证书问题。Kubernetes版本:1.28.2容器运行时:containerd 1.6.20私有仓库:Harbor(使用自签名证书)(超简单搭建私有仓库Harbor-亲测无坑解决K8s私有仓库证书问题的关键在于正确配置容器运行时(本例中是containerd)信任私有仓库的证书。

lzz的博客 2140

嵌入式面经(2)——央企篇

前文得知我只投央企,不投国企,有面试的央企大致有三类:感兴趣的同学可以和我私聊军工央企相关(航空航天,兵器兵工)制造央企相关(三桶油,装备制造)金融运维相关(信通集团,国有银行)接下来我将对我有的面试中询问的面经进行总结。

coldmood77的博客 468

模型泛化能力提升:领域自适应与迁移学习

模型泛化能力提升:领域自适应与迁移学习​ ,人工智能,计算机视觉,大模型,AI,在机器学习和深度学习的应用中,模型的泛化能力是一个关键问题。泛化能力指的是模型在新的、未见过的数据上表现良好的能力。然而,实际情况中,训练数据和测试数据往往来自不同的领域,存在分布差异,这会导致模型的泛化能力下降。领域自适应与迁移学习正是为了解决这一问题而发展起来的重要技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+

ReAct框架到多智能体协作:OpenClaw任务分解机制的演进与突破

AI的最终价值是落地,是帮用户解决实际问题,而不是停留在聊天界面里。从ReAct框架到多智能体协作,OpenClaw的任务分解体系走了一条非常务实的路线:所有的优化都是为了解决真实场景里的痛点,所有的设计都是为了让用户用起来更省心。很多人说现在的AI还是“人工智障”,那是因为他们没有用到真正能落地的AI产品。当你用过OpenClaw,体验过你说一句话它就能把一整套复杂任务全都做完的感觉,你就会明白:AI代替人做重复性工作的时代,已经真的来了。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 311

最全的Hermes安装教程以及Hermes WebUI安装部署和配置指南

* 直接执行命令**

小石头的专栏 1074

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: HomeBrew 安装
下一篇: LeetCode 547.省份数量 题解
耐利
博客等级 码龄12年 188粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值