LeetCode 1733. 需要教语言的最少人数(哈希+枚举)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

在一个由 m 个用户组成的社交网络里,我们获取到一些用户之间的好友关系。
两个用户之间可以相互沟通的条件是他们都掌握同一门语言

给你一个整数 n ,数组 languages 和数组 friendships ,它们的含义如下:

  • 总共有 n 种语言,编号从 1 到 n 。
  • languages[i] 是第 i 位用户掌握的语言集合
  • friendships[i] = [u​​​​​​i​​​, v​​​​​​i] 表示 u​​​​​​​​​​​i​​​​​ 和 vi 为好友关系。

你可以选择 一门 语言并教会一些用户,使得所有好友之间都可以相互沟通。
请返回你 最少 需要教会多少名用户。

请注意,好友关系没有传递性,也就是说如果 x 和 y 是好友,且 y 和 z 是好友, x 和 z 不一定是好友。

示例 1:
输入:n = 2, 
languages = [[1],[2],[1,2]], 
friendships = [[1,2],[1,3],[2,3]]
输出:1
解释:你可以选择教用户 1 第二门语言,
也可以选择教用户 2 第一门语言。示例 2:
输入:n = 3, 
languages = [[2],[1,3],[1,2],[3]], 
friendships = [[1,4],[1,2],[3,4],[2,3]]
输出:2
解释:教用户 1 和用户 3 第三门语言,需要教 2 名用户。提示:
2 <= n <= 500
languages.length == m
1 <= m <= 500
1 <= languages[i].length <= n
1 <= languages[i][j] <= n
1 <= u​​​​​​i < v​​​​​​i <= languages.length
1 <= friendships.length <= 500
所有的好友关系 (u​​​​​i, v​​​​​​i) 都是唯一的。
languages[i] 中包含的值互不相同。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-number-of-people-to-teach
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 会做,但是比赛的时候,一个变量写错了,一直过不去。。。

  • 先把每种语言会的人,放在一起,检查关系列表,看每对关系之间是否能交流
  • 枚举每种语言,跳过能沟通的,两个人不会这种语言的,就学习,计数+1
class Solution {
public:int minimumTeachings(int n, vector<vector<int>>& languages, vector<vector<int>>& friendships) {int p = languages.size(); // 人数unordered_map<int, unordered_set<int>> lang_peoples;//语言 - 会的人集合for(int i = 0; i < p; i++) {for(auto l : languages[i])lang_peoples[l].insert(i);}vector<bool> canspeak(friendships.size(), false);//能沟通吗for(int i = 0; i < friendships.size(); i++){int a = friendships[i][0]-1, b = friendships[i][1]-1;for(auto& lp : lang_peoples){if(lp.second.count(a) && lp.second.count(b)){canspeak[i] = true;break;}}}// 这里比赛的时候写成了 n-1, 我哭了,我就说逻辑没错啊。。。int teach = p-1, count = 0; //至少要教 p-1个人for(auto& lp : lang_peoples){	// 遍历语言count = 0;for(int i = 0; i < friendships.size(); i++){	// 遍历关系int a = friendships[i][0]-1, b = friendships[i][1]-1;if(canspeak[i])//能沟通的忽略continue;if(!lp.second.count(a)){	//不能沟通,且不会这种语言,学习lp.second.insert(a);count++;}if(!lp.second.count(b)){	//不能沟通,且不会这种语言,学习lp.second.insert(b);count++;}}teach = min(teach, count);}return teach;}
};

812 ms 142.8 MB C++

or

不能沟通的人数,减去,这群人里说的最多的语言的人数,就是最少要教的人

class Solution {
public:int minimumTeachings(int n, vector<vector<int>>& languages, vector<vector<int>>& friendships) {int p = languages.size(); // 人数unordered_map<int, unordered_set<int>> lang_peoples;//语言 - 会的人集合for(int i = 0; i < p; i++) {for(auto l : languages[i])lang_peoples[l].insert(i);}vector<bool> canspeak(friendships.size(), false);//能沟通吗for(int i = 0; i < friendships.size(); i++){int a = friendships[i][0]-1, b = friendships[i][1]-1;for(auto& lp : lang_peoples){if(lp.second.count(a) && lp.second.count(b)){canspeak[i] = true;break;}}}vector<int> lang_people_can_say(n,0);unordered_set<int> pp;//不能沟通的人们for(int i = 0; i < friendships.size(); i++){	// 遍历关系if(canspeak[i])//能沟通的忽略continue;int a = friendships[i][0]-1, b = friendships[i][1]-1;if(!pp.count(a)){pp.insert(a);for(auto l : languages[a])lang_people_can_say[l-1]++;//统计不能沟通的人会说的语言}if(!pp.count(b)){pp.insert(b);for(auto l : languages[b])lang_people_can_say[l-1]++;//统计不能沟通的人会说的语言}}return pp.size() - *max_element(lang_people_can_say.begin(),lang_people_can_say.end());}
};

648 ms 138.1 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

在c#中用mutex类实现线程的互斥_面试官经常问的synchronized实现原理和锁升级过程,你真的了解吗...

本篇文章主要从字节码和JVM底层来分析synchronized实现原理和锁升级过程&#xff0c;其中涉及到了简单认识字节码、对象内部结构以及ObjectMonitor等知识点。阅读本文之前&#xff0c;如果大家对synchronized关键字的基本使用还不是很了解的话&#xff0c;推荐阅读笔者之前的一…

TensorFlow 2.x GPU版在conda虚拟环境下安装步骤

先下载安装驱动&#xff1a;https://www.nvidia.cn/Download/index.aspx?langcn&#xff0c;版本要求 WSL cuda 驱动 https://developer.nvidia.com/cuda/wsl 下载安装 anaconda&#xff0c;管理虚拟环境&#xff1a;https://www.anaconda.com/products/individual&#xff0…

如何通过网络将文件传输到嵌入式设备_嵌入式系统 Boot Loader技术内幕,带你完全了解Boot Loader...

一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次&#xff1a;1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选)&#xff0c;和 Boot Loader 两大部分。2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。3. 文件系统。包括根文件系统和建…

python获取当前路径的方法_Python获取脚本所在目录的正确方法【转】

原博文 2015-09-24 10:21 − 1.以前的方法如果是要获得程序运行的当前目录所在位置&#xff0c;那么可以使用os模块的os.getcwd()函数。如果是要获得当前执行的脚本的所在目录位置&#xff0c;那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得。实际上sys.path是Pyt…

TensorFlow 2.0 - Checkpoint 保存变量、TensorBoard 训练可视化

文章目录1. Checkpoint 保存变量2. TensorBoard 训练过程可视化学习于&#xff1a;简单粗暴 TensorFlow 2 1. Checkpoint 保存变量 tf.train.Checkpoint 可以保存 tf.keras.optimizer 、 tf.Variable 、 tf.keras.Layer 、 tf.keras.Model path "./checkp.ckpt" …

coturn的负载均衡特性_高性能负载均衡

单服务器无论如何优化&#xff0c;无论采用多好的硬件&#xff0c;总会有一个性能天花板&#xff0c;当单服务器的性能无法满足业务需求时&#xff0c;就需要设计高性能集群来提升系统整体的处理性能。高性能集群的本质很简单&#xff0c;通过增加更多的服务器来提升系统整体的…

LintCode MySQL 1928. 网课上课情况分析 I

文章目录1. 题目2. 解题1. 题目 online_class_situation 表展示了一些同学上网课的行为活动。 每行数据记录了一名同学在退出网课之前&#xff0c;当天使用同一台设备登录课程后听过的课程数目&#xff08;可能是0个&#xff09;。 写一条 SQL 语句&#xff0c;查询每位同学第…

python输入十个数输出最大值_python输入十个数如何输出最大值

python输入十个数输出最大值的方法&#xff1a;1、如果是整数的话&#xff0c;使用函数【a, b, c map(int, input().split())】&#xff1b;2、使用函数【Xinput().split()】。 相关免费学习推荐&#xff1a;python视频教程 python输入十个数输出最大值的方法&#xff1a; 第一…

LintCode MySQL 1921. 从不充值的玩家(where not in)

文章目录1. 题目2. 解题1. 题目 描述 A game database contains two tables, player table and recharge table. Write a SQL query to find all players who never recharge. 样例 https://www.lintcode.com/problem/players-who-never-recharge/description 2. 解题 -- …

古风一棵桃花树简笔画_广东有个现实版的“桃花源”,藏于秘境之中,最适合情侣来度假!...

上学时&#xff0c;初闻“芳草鲜美&#xff0c;落英缤纷”&#xff0c;并没有多大感触。直到后来长大离家&#xff0c;每每为生活奔波劳累时&#xff0c;为工作琐碎忧心费神时&#xff0c;才骤然明了当年五柳先生所描绘的“桃花源”该是多少人的脑中所想、心中所向……原以为这…

clob和blob是不是可以进行模糊查询_你知道什么是 MySQL 的模糊查询?

作者 | luanhz责编 | 郭芮本文对MySQL中几种常用的模糊搜索方式进行了介绍&#xff0c;包括LIKE通配符、RegExp正则匹配、内置字符串函数以及全文索引&#xff0c;最后给出了性能对比。引言MySQL根据不同的应用场景&#xff0c;支持的模糊搜索方式有多种&#xff0c;例如应用最…

LintCode 1917. 切割剩余金属

文章目录1. 题目2. 解题1. 题目 描述 金属棒工厂的厂长拥有 n 根多余的金属棒。 当地的一个承包商提出&#xff0c;只要所有的棒材具有相同的长度&#xff08;用 saleLength 表示棒材的长度&#xff09;&#xff0c;就将金属棒工厂的剩余棒材全部购买。 厂长可以通过将每根棒…

太原理工电子信焦工程_电气工程及其自动化专业毕业后做什么工作?近几年就业和收入怎样...

本文内容为各大高校往届大学生真实的现身说法内容&#xff0c;但因为是往届&#xff0c;每年该专业的大学情况可能会发生略微变化&#xff0c;所以部分内容较今年&#xff0c;明年甚至以后几年&#xff0c;实际情况可能会略有不同但是对于本专业的相关信息还是非常有参考价值的…

怎么查看linux日志里请求量最高的url访问最多的_实用的Linux高级命令,开发运维都要懂!...

在运维的坑里摸爬滚打好几年了&#xff0c;我还记得我刚开始的时候&#xff0c;我只会使用一些简单的命令&#xff0c;写脚本的时候&#xff0c;也是要多简单有多简单&#xff0c;所以有时候写出来的脚本又长又臭。像一些高级点的命令&#xff0c;比如说 Xargs 命令、管道命令、…

ggplot2箱式图两两比较_第十九章_使用ggplot2进行高级绘图

介绍ggplot2包使用形状、颜色和尺寸来对多元数据进行可视化用刻面图比较各组自定义ggplot2图19.1 R中的四种图形系统基础gridlatticeggplot2(用的较多)gghub需要的R包ggpolt2gridExtra(可以拼图)car19.2 ggplot2介绍library(ggplot2)ggplot(datamtcars, aes(xwt, ympg)) geom_p…

LeetCode 1742. 盒子中小球的最大数量

文章目录1. 题目2. 解题1. 题目 你在一家生产小球的玩具厂工作&#xff0c;有 n 个小球&#xff0c;编号从 lowLimit 开始&#xff0c;到 highLimit 结束&#xff08;包括 lowLimit 和 highLimit &#xff0c;即 n highLimit - lowLimit 1&#xff09;。 另有无限数量的盒子…

bash shell命令(1)

本文地址&#xff1a;http://www.cnblogs.com/archimedes/p/bash-shell1.html&#xff0c;转载请注明源地址。 ls命令 ls用来列出目录的内容&#xff0c;它是用户最常用的命令之一&#xff0c;ls命令的格式为&#xff1a; ls[选项][目录名或文件名] 选项的主要参数&#xff1a;…

LeetCode 1743. 从相邻元素对还原数组(拓扑排序)

文章目录1. 题目2. 解题1. 题目 存在一个由 n 个不同元素组成的整数数组 nums &#xff0c;但你已经记不清具体内容。 好在你还记得 nums 中的每一对相邻元素。 给你一个二维整数数组 adjacentPairs &#xff0c;大小为 n - 1 &#xff0c;其中每个 adjacentPairs[i] [ui, v…

BP神经网络算法学习

BP&#xff08;Back Propagation&#xff09;网络是1986年由Rumelhart和McCelland为首的科学家小组提出&#xff0c;是一种按误差逆传播算法训练的多层前馈网络&#xff0c;是眼下应用最广泛的神经网络模型之中的一个。BP网络能学习和存贮大量的输入-输出模式映射关系&#xff…

无向图的深度优先遍历非递归_【数据结构图(一)】什么是图

一、什么是“图”(Graph) 表示“多对多”的关系包含一组顶点&#xff1a;通常用 V (Vertex) 表示顶点集合一组边&#xff1a;通常用 E (Edge) 表示边的集合无向边&#xff1a;(v, w) 有向边&#xff1a;不考虑重边和自回路二、抽象数据类型定义类型名称&#xff1a;图(Graph)数…