LeetCode 1733. 需要教语言的最少人数(哈希+枚举)
生活随笔
收集整理的這篇文章主要介紹了
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
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阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 1733. 需要教语言的最少人数(哈希+枚举)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 04.卷积神经网络 W3.目标检测(作业
- 下一篇: LeetCode 1640. 能否连接形