日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/7/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1733. 需要教语言的最少人数(哈希+枚举) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

在一個(gè)由 m 個(gè)用戶組成的社交網(wǎng)絡(luò)里,我們獲取到一些用戶之間的好友關(guān)系。
兩個(gè)用戶之間可以相互溝通的條件是他們都掌握同一門語(yǔ)言

給你一個(gè)整數(shù) n ,數(shù)組 languages 和數(shù)組 friendships ,它們的含義如下:

  • 總共有 n 種語(yǔ)言,編號(hào)從 1 到 n 。
  • languages[i] 是第 i 位用戶掌握的語(yǔ)言集合
  • friendships[i] = [u??????i???, v??????i] 表示 u???????????i????? 和 vi 為好友關(guān)系。

你可以選擇 一門 語(yǔ)言并教會(huì)一些用戶,使得所有好友之間都可以相互溝通。
請(qǐng)返回你 最少 需要教會(huì)多少名用戶。

請(qǐng)注意,好友關(guān)系沒(méi)有傳遞性,也就是說(shuō)如果 x 和 y 是好友,且 y 和 z 是好友, x 和 z 不一定是好友。

示例 1: 輸入:n = 2, languages = [[1],[2],[1,2]], friendships = [[1,2],[1,3],[2,3]] 輸出:1 解釋:你可以選擇教用戶 1 第二門語(yǔ)言, 也可以選擇教用戶 2 第一門語(yǔ)言。示例 2: 輸入:n = 3, languages = [[2],[1,3],[1,2],[3]], friendships = [[1,4],[1,2],[3,4],[2,3]] 輸出:2 解釋:教用戶 1 和用戶 3 第三門語(yǔ)言,需要教 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 所有的好友關(guān)系 (u?????i, v??????i) 都是唯一的。 languages[i] 中包含的值互不相同。

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/minimum-number-of-people-to-teach
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

2. 解題

  • 會(huì)做,但是比賽的時(shí)候,一個(gè)變量寫(xiě)錯(cuò)了,一直過(guò)不去。。。

  • 先把每種語(yǔ)言會(huì)的人,放在一起,檢查關(guān)系列表,看每對(duì)關(guān)系之間是否能交流
  • 枚舉每種語(yǔ)言,跳過(guò)能溝通的,兩個(gè)人不會(huì)這種語(yǔ)言的,就學(xué)習(xí),計(jì)數(shù)+1
class Solution { public:int minimumTeachings(int n, vector<vector<int>>& languages, vector<vector<int>>& friendships) {int p = languages.size(); // 人數(shù)unordered_map<int, unordered_set<int>> lang_peoples;//語(yǔ)言 - 會(huì)的人集合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;}}}// 這里比賽的時(shí)候?qū)懗闪?n-1, 我哭了,我就說(shuō)邏輯沒(méi)錯(cuò)啊。。。int teach = p-1, count = 0; //至少要教 p-1個(gè)人for(auto& lp : lang_peoples){ // 遍歷語(yǔ)言count = 0;for(int i = 0; i < friendships.size(); i++){ // 遍歷關(guān)系int a = friendships[i][0]-1, b = friendships[i][1]-1;if(canspeak[i])//能溝通的忽略continue;if(!lp.second.count(a)){ //不能溝通,且不會(huì)這種語(yǔ)言,學(xué)習(xí)lp.second.insert(a);count++;}if(!lp.second.count(b)){ //不能溝通,且不會(huì)這種語(yǔ)言,學(xué)習(xí)lp.second.insert(b);count++;}}teach = min(teach, count);}return teach;} };

812 ms 142.8 MB C++

or

不能溝通的人數(shù),減去,這群人里說(shuō)的最多的語(yǔ)言的人數(shù),就是最少要教的人

class Solution { public:int minimumTeachings(int n, vector<vector<int>>& languages, vector<vector<int>>& friendships) {int p = languages.size(); // 人數(shù)unordered_map<int, unordered_set<int>> lang_peoples;//語(yǔ)言 - 會(huì)的人集合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++){ // 遍歷關(guān)系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]++;//統(tǒng)計(jì)不能溝通的人會(huì)說(shuō)的語(yǔ)言}if(!pp.count(b)){pp.insert(b);for(auto l : languages[b])lang_people_can_say[l-1]++;//統(tǒng)計(jì)不能溝通的人會(huì)說(shuō)的語(yǔ)言}}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/

長(zhǎng)按或掃碼關(guān)注我的公眾號(hào)(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!

總結(jié)

以上是生活随笔為你收集整理的LeetCode 1733. 需要教语言的最少人数(哈希+枚举)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。