面试题 17.07. 婴儿名字

news2024/11/23 7:14:26

链接:. - 力扣(LeetCode)

题解:

class Solution {
public:
    vector<string> trulyMostPopular(vector<string>& names, vector<string>& synonyms) {
        UnionFind uf;
        for (auto& syn : synonyms) {
            //cout << "syn:" << syn << endl;
            auto syn_name = split_name(syn);
            uf.add(syn_name.first);
            uf.add(syn_name.second);
            // 将这两个节点放入一个group
            uf.merge(syn_name.first, syn_name.second);
        }
        //
        std::unordered_map<std::string, std::set<People>> fathers;
        std::unordered_map<std::string, int> fathers_count;
        // 遍历所有名字
        for (auto& name : names) {
            People people;
            split(name, people);
            std::string father = uf.get_father(people.name);
            // 获得父亲,并且按照字典序列进行排序
            fathers[father].insert(people);
            //cout << "nnnnn: " << people.name << endl;
            // 统计按照group父亲节点,总数量
            fathers_count[father] += people.count;
        }
        std::vector<std::string> result;
        for (auto& father : fathers) {
            // 获得字典序的第一个名字
            std::string str = father.second.begin()->name;
            //cout << "str:" << str << endl;
            // 获得总数量
            str = str + "(" + to_string(fathers_count[father.first]) + ")";
            // 追加结果
            result.push_back(str);
        }
        return result;
    }
private:
struct People {
    People() {
        count = 0;
    }
    std::string name;
    int count = 0;
    // 按照字典序列进行排序
    bool operator < (const People& people) const {
        return name < people.name;
    }
};
    void split(string& str, People& people) {
        auto it = str.find("(");
        people.name = str.substr(0, it);
        people.count = atoi(str.substr(it+1, str.size() - it -1).c_str());
        //cout << "name: " << people.name << " count:" << people.count << endl;
    }
    std::pair<std::string, std::string> split_name(string& str) {
        auto it = str.find(",");
        std::pair<std::string, std::string> result;
        result.first = str.substr(1, it-1);
        result.second = str.substr(it+1, str.size() - it -1);
        result.second.pop_back();
        //cout << "first: " << result.first << " second:" << result.second << endl;
        return result;
    }
class UnionFind {
public: 
    void add(std::string& p) {
        auto ite = _father.find(p);
        if (ite == _father.end()) {
            _father[p] = p;
        }
    }
    void merge(std::string& p, std::string& q) {
        std::string p_father = get_father(p);
        std::string q_father = get_father(q);
        if (p_father != q_father) {
            _father[p_father] = q_father;
        }
    }
    std::string get_father(std::string& _p) {
        add(_p); //如果没有的节点,也要添加个节点
        std::string p = _p;
        while (_father[p] != p) {
            p = _father[p];
        }
        return p;
    }
    std::unordered_map<std::string, std::string> _father;
};
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1829855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

USB2.0高速转接芯片CH347应用开发手册

CH347应用开发手册 V1.3 一、简介 CH347是一款USB2.0高速转接芯片&#xff0c;以实现USB-UART(HID串口/VCP串口)、USB-SPI、USB-I2C、USB-JTAG以及USB-GPIO等接口&#xff0c;分别包含在芯片的四种工作模式中。 CH347DLL用于为CH347芯片提供操作系统端的UART/SPI/I2C/JTAG/B…

零散的面试题

★1.java常见的引用类型 强:普通的变量引用 软:内存够时,GC不会主动删除,内存不够时,GC会删除 弱:一旦执行GC就会被删除 虚:用了感觉没用 ★2.JDK1.8新特性 lambda表达式(极大简化了匿名内部类的创建&#xff0c;促进函数式编程的风格)函数式接口(只能有一个抽象方法的接口 )日…

什么是On-die Termination(ODT,片上端接)

在深入研究“片上端接”之前&#xff0c;让我们先了解一下“端接”的概念。为什么需要“端接”&#xff1f; 高速的数据传输速率和实时功能是电子设备的目标。这些共同的目标推动了电子设备不仅需要高速运行&#xff0c;而且还需要提供快速响应和实时性能&#xff0c;以满足各种…

欧阳修,仕途波澜中的文坛巨匠

欧阳修&#xff0c;字永叔&#xff0c;号醉翁、六一居士&#xff0c;生于北宋真宗景德四年&#xff08;公元1007年&#xff09;&#xff0c;卒于北宋神宗熙宁五年&#xff08;公元1072年&#xff09;&#xff0c;享年65岁。他是北宋时期著名的文学家、史学家&#xff0c;也是唐…

嘻嘻我是图床倒霉蛋

嘻嘻花了将近两个小时的时间配了一个小小的图床 手把手教你搭建阿里云图床(PicGoTypora阿里云OSS)&#xff0c;新手小白一看就会-阿里云开发者社区 (aliyun.com) 大体上按照这篇配置就好 七牛云因为测试域名30天到期,用自己的得备案,所以比较麻烦,建议直接上阿里云 我买了一…

SVM-SMO算法

SMO算法思想 上面这个优化式子比较复杂&#xff0c;里面有m个变量组成的向量α&#x1d6fc;需要在目标函数极小化的时候求出。直接优化时很难的。SMO算法则采用了一种启发式的方法。它每次只优化两个变量&#xff0c;将其他的变量都视为常数。由于 ∑ i 1 m α i y i 0 \su…

springboot与flowable(6):任务分配(监听器)

一、创建流程模型 制作如下流程 给审批用户1一个值表达式。 二、给用户审批2添加监听器 创建一个监听器类 package org.example.flowabledemo2.listener;import org.flowable.engine.delegate.TaskListener; import org.flowable.task.service.delegate.DelegateTask;/*** 自定…

【Spine学习05】之网格权重概念,以及让小臂动起来

上一节绑定好骨骼设置好了父级之后呢&#xff0c; 会发现操纵只有大臂能摆动&#xff0c;但是小臂以及手部无法K帧动起来。 所以这时候处理需要引入网格和权重的概念&#xff1a; 网格&#xff1a;在图片内设置多边形&#xff0c;操纵多边形顶点让图片变形 &#xff1a;启用按…

分布式技术导论 — 探索分析从起源到现今的巅峰之旅(分布式技术)

分析探索从起源到现今的巅峰之旅 背景介绍数据可伸缩性案例 计算可伸缩性案例 代价和权衡分布式的代价分布式的权衡权衡策略 分布式技术方向数据系统运算系统 分布式数据系统Partition&#xff08;分区&#xff09;Round-Robin&#xff08;轮询&#xff09;局限性 Range&#x…

【QT5】<重点> QT串口编程

目录 前言 一、串口编程步骤 0. 添加串口模块 1. 自动搜索已连接的串口 2. 创建串口对象 3. 初始化串口 4. 打开串口 5. 关闭串口 6. 发送数据 7. 接收数据 二、简易串口助手 1. 实现效果 2. 程序源码 3. 实现效果二 前言 本篇记录QT串口编程相关内容&#xff0…

半导体芯片结构以及译码驱动

一.半导体芯片结构 可能并不是只有一个芯片&#xff0c;有多个芯片就需要片选线了。 二.半导体存储芯片的译码驱动 主要有两种方式&#xff1a;线选法和重合法 线选法&#xff1a;每一个存储单元都用一根字选择线选中&#xff0c;直接选中存储单元的各位。&#xff08;一维…

Codeforces Round 953 (Div. 2)(A~D题解)

这次比赛是我最顺利的一次比赛&#xff0c;也是成功在中途打进前1500&#xff0c;写完第三道题的时候也是保持在1600左右&#xff0c;但是后面就啥都不会了&#xff0c;还吃了点罚时&#xff0c;虽说如此也算是看到进步了&#xff0c;D题学长说很简单&#xff0c;但是我当时分析…

增强大型语言模型(LLM)可访问性:深入探究在单块AMD GPU上通过QLoRA微调Llama 2的过程

Enhancing LLM Accessibility: A Deep Dive into QLoRA Through Fine-tuning Llama 2 on a single AMD GPU — ROCm Blogs 基于之前的博客《使用LoRA微调Llama 2》的内容&#xff0c;我们深入研究了一种称为量化低秩调整&#xff08;QLoRA&#xff09;的参数高效微调&#xff0…

非常好用的7个Vue3组件库!!【送源码】

说到Vue&#xff0c;怎能不提Vue3呢&#xff1f; 它的大名鼎鼎主要归功于一项革命性的创新——Composition API。 这个新功能为逻辑复用带来了前所未有的友好性和灵活性&#xff0c;让开发者们在构建应用时如鱼得水。 如果你现在正在使用Vue3&#xff0c;或者在新的一年考虑…

reflutter工具实践之--xx一番赏app

此文章已经录制b站视频&#xff1a; flutter逆向案例-某某一番赏_哔哩哔哩_bilibili 一、工具介绍--reFlutter 这个框架帮助 Flutter 应用逆向工程&#xff0c;使用 Flutter 库的补丁版本&#xff0c;该版本已经编译并准备好重新打包应用。此库修改了快照反序列化过程&#…

SpringCloudNetflix组件整合

SpringCloudNetflix组件整合 Eureka注册中心 Eureka是什么 Eureka是netflix的一个子模块&#xff0c;也是核心模块之一&#xff0c;Eureka是一个基于REST的服务&#xff0c;用于定位服务&#xff0c;以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务架构来说是…

“Dream Machine“震撼登场!免费推出的AI电影级巨制在网络上引爆热潮

"巅峰初现&#xff01;视频AI新星‘梦幻制造者’华美登场&#xff01; 在视频生成技术的赛道上&#xff0c;Luma AI昨日骄傲地揭开了其旗舰创新——梦幻制造者&#xff08;Dream Machine&#xff09;的神秘面纱&#xff0c;凭借无与伦比的文本到视频及图像到视频转换技术…

Cyber Weekly #11

赛博新闻 1、苹果召开2024年WWDC开发者大会 本周二&#xff08;6月11日&#xff09;凌晨1点&#xff0c;苹果召开2024年全球开发者大会&#xff0c;宣布与OpenAl合作&#xff0c;在iOS18、iPadOS18和macOS Sequoia中全面支持GPT-4o。用户在询问Siri问题时&#xff0c;Siri可以…

Oracle 入门--前提

目录 1.sqlplus 2.dual是什么&#xff1f; 3.SQL语句的种类 4.Oracle是如何工作的 5.Oracle查看配置文件 6.修改配置文件 7.常用的参数设置 1.sqlplus 管理数据库&#xff1a;启动&#xff0c;关闭&#xff0c;创建&#xff0c;删除对象......查看数据库的运行状态&…

01 - matlab m_map地学绘图工具基础函数理解(一)

01 - matlab m_map地学绘图工具基础函数理解&#xff08;一&#xff09; 0. 引言1. m_demo2. 小结 0. 引言 上篇介绍了m_map的配置过程&#xff0c;本篇开始介绍下m_map中涉及到的所有可调用函数。如果配置的没有问题&#xff0c;执行">>help m_map"可以看到类…