Leetcode-721 账户合并

简介: Leetcode-721 账户合并

题目(此题还可用作合并 json 数据)


给定一个列表 accounts,每个元素 accounts[i] 是一个字符串列表,其中第一个元素 accounts[i][0] 是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。


现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的账户,但其所有账户都具有相同的名称。


合并账户后,按以下格式返回账户:每个账户的第一个元素是名称,其余元素是按顺序排列的邮箱地址。账户本身可以以任意顺序返回。


示例


输入:


accounts = [[“John”, “johnsmith@mail.com”, “john00@mail.com”], [“John”, “johnnybravo@mail.com”], [“John”, “johnsmith@mail.com”, “john_newyork@mail.com”], [“Mary”, “mary@mail.com”]]


输出:


[[“John”, ‘john00@mail.com’, ‘john_newyork@mail.com’, ‘johnsmith@mail.com’], [“John”, “johnnybravo@mail.com”], [“Mary”, “mary@mail.com”]]


解释:


第一个和第三个 John 是同一个人,因为他们有共同的邮箱地址 “johnsmith@mail.com”。


第二个 John 和 Mary 是不同的人,因为他们的邮箱地址没有被其他帐户使用。


可以以任何顺序返回这些列表,例如答案 [[‘Mary’,‘mary@mail.com’],


[‘John’,‘johnnybravo@mail.com’],


[‘John’,‘john00@mail.com’,‘john_newyork@mail.com’,‘johnsmith@mail.com’]] 也是正确的。


题解

class Solution:
    def accountsMerge(self, accounts: List[List[str]]) -> List[List[str]]:
        belongs = collections.defaultdict(list)
        for i, j in enumerate(accounts):
            for email in j[1:]:
                belongs[email].append(i)
        email_visited = set()
        id_visited = set()
        def dfs(id):
            if id in id_visited:
                return
            id_visited.add(id)
            for email in accounts[id][1:]:
                if email in email_visited:
                    continue
                email_visited.add(email)
                ans[-1].append(email)
                for i in belongs[email]:
                    dfs(i)
        ans = []
        for i in range(len(accounts)):
            if i not in id_visited:
                ans.append(accounts[i][:1])
                dfs(i)
        for i in range(len(ans)):
            ans[i] = ans[i][:1] + sorted(ans[i][1:])
        return ans


相关文章
|
缓存 JavaScript 算法
vue2和vue3之间diff算法的差异
vue2和vue3之间diff算法的差异
|
7月前
|
JavaScript 搜索推荐 Java
基于springboot的民宿预定管理系统
本研究针对民宿市场管理效率低、信息化程度不足等问题,设计并实现基于Spring Boot、Vue和MySQL的民宿预订管理系统。系统提升预订效率与用户体验,助力行业数字化转型。
|
7月前
|
机器学习/深度学习 存储 自然语言处理
18_TF-IDF向量表示:从词频到文档相似度
在自然语言处理(NLP)领域,如何将非结构化的文本数据转换为计算机可以处理的数值形式,是一个基础性的关键问题。词袋模型(Bag of Words, BoW)作为一种简单直接的文本表示方法,虽然能够捕获文本中的词频信息,但无法区分不同词的重要性。为了解决这个问题,TF-IDF(Term Frequency-Inverse Document Frequency)向量表示方法应运而生,它通过评估词语对文档集合中某个文档的重要程度,为文本分析提供了更准确的数值表示。
682 1
|
10月前
|
存储 数据采集 JSON
供应链管理优化:通过京东API实现库存自动预警
通过京东API实现库存自动预警,可实时监控库存变化,结合销售、采购数据动态设置预警规则,优化库存周转效率,降低缺货风险与仓储成本,提升供应链管理自动化水平。
|
存储 人工智能 图计算
MiniRAG:迷你 RAG 系统加成小型语言模型,爆发出与大型语言模型相当的性能
MiniRAG 是香港大学推出的新型 RAG 系统,专为资源受限场景设计,支持高效知识检索与推理,适用于多种应用场景。
694 12
MiniRAG:迷你 RAG 系统加成小型语言模型,爆发出与大型语言模型相当的性能
|
机器学习/深度学习 算法
《提升支持向量机泛化能力:核函数改进策略大揭秘》
支持向量机(SVM)凭借其强大的分类和回归能力在机器学习中脱颖而出,而核函数的选择与改进对其泛化能力至关重要。核函数将低维数据映射到高维空间,使非线性数据变得线性可分。通过选择合适的核函数、采用自适应核函数、组合不同核函数、引入先验知识设计核函数及优化参数,可以显著提升SVM的性能。例如,在图像识别中,RBF核常用于处理非线性数据;在文本分类中,线性核与RBF核组合能提高准确性。
501 9
|
存储 机器学习/深度学习 自然语言处理
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefix tuing等]
|
弹性计算 算法 测试技术
芯片研发设计单月算力成本降了50%怎么做到的?
面对芯片设计中日益严峻的算力挑战,S半导体经历了从自建HPC集群到结合公有云的尝试,导致成本上升。后来,采用MMCloud解决方案,首月即实现50%的算力成本降低。MMCloud通过大规模集群管理、算力碎片整理和机型动态调整实现精细化调度,帮助S半导体提升了研发效率并降低成本,展示了在行业寒冬中的降本增效策略。
455 5
|
存储 安全 数据库连接
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
1163 0
|
城市大脑 监控 搜索推荐
云上智能城市大脑:构建未来智慧城市的核心引擎
更加安全可靠:随着网络安全和数据保护问题的日益突出,云上智能城市大脑将加强安全防护和数据加密技术,确保城市数据和系统的安全可靠运行。 更加开放共享:未来,云上智能城市大脑将更加注重数据的开放共享和跨领域
810 0