133. Clone Graph

歡迎fork and star:Nowcoder-Repository-github

133. Clone Graph

題目

 Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.OJ's undirected graph serialization:Nodes are labeled uniquely.
We use # as a separator for each node, and , as a separator for node label and each neighbor of the node.As an example, consider the serialized graph {0,1,2#1,2#2,2}.The graph has a total of three nodes, and therefore contains three parts as separated by #.First node is labeled as 0. Connect node 0 to both nodes 1 and 2.Second node is labeled as 1. Connect node 1 to node 2.Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle.Visually, the graph looks like the following:1/ \/   \0 --- 2/ \\_/

解析

  • 考察圖的基本遍歷方法,DFS/BFS
  • 注意細節bug
  • 運用unordered_map<UndirectedGraphNode*, UndirectedGraphNode*> hash進行圖的映射關系存儲
// clone graph
class Solution_133 {// date 2017/12/29 10:01
// date 2017/12/29 11:04
public:UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { unordered_map<UndirectedGraphNode*, UndirectedGraphNode*> hash;if (!node){return node;}if (hash.find(node)!=hash.end()) //找到,關鍵字已經訪問過{hash[node] = new UndirectedGraphNode(node->label);for (auto iter: node->neighbors){hash[node]->neighbors.push_back(cloneGraph(iter)); //遞歸DFS   //超時}}return hash[node];}UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) //BFS{       if (!node){return node;}   unordered_map<UndirectedGraphNode*, UndirectedGraphNode*> hash;UndirectedGraphNode* head = new UndirectedGraphNode(node->label);hash[node] = head;queue<UndirectedGraphNode*> que;que.push(node);  //que.push(head); bug 花費1小時查找while (!que.empty()){UndirectedGraphNode* q = que.front();que.pop();for (auto iter: q->neighbors){if (!hash[iter]) //還沒有訪問{UndirectedGraphNode* temp = new UndirectedGraphNode(iter->label);hash[iter] = temp;que.push(iter);}hash[q]->neighbors.push_back(hash[iter]); //將一個節點的鄰接點關系記錄下來}}return hash[node];}};

題目來源

  • 133. Clone Graph

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453222.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453222.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453222.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

進程控制塊PCB簡介

PCB(process control block)&#xff0c;進程控制塊&#xff0c;是我們學習操作系統后遇到的第一個數據結構描述&#xff0c;它是對系統的進程進行管理的重要依據&#xff0c;和進程管理相關的操作無一不用到PCB中的內容。一般情況下&#xff0c;PCB中包含以下內容&#xff1a;…

html坐標繪制路徑,canvas學習筆記之繪制簡單路徑

1 線段(直線路徑)繪制線段一般步驟:moveTo(x,y) 移動畫筆到指定的坐標點(x,y)lineTo(x,y) 使用直線連接當前端點和指定的坐標點(x,y)stroke() 根據當前的畫線樣式&#xff0c;繪制當前或已經存在的路徑2 矩形路徑繪制矩形路徑一般步驟:rect(x, y, width, height) 矩形路徑&…

如何實現Punycode中文域名轉碼

如果你見過中文域名應該會覺得很奇怪&#xff0c;為什么復制出來的域名變成一個很莫名其妙的字符串&#xff0c;比如這個秀恩愛的域名“郝越.我愛你”&#xff0c;實際顯示的域名是 http://xn--vq3al9d.xn--6qq986b3xl/ 這就叫 Punycode 具體查看 https://www.punycoder.com/ P…

進程控制塊包含的信息

進程控制塊包含三類信息 1.標識信息。 用于唯一地標識一個進程&#xff0c;常常分由用戶使用的外部標識符和被系統使用的內部標識號。幾乎所有操作系統中進程都被賦予一個唯一的、內部使用的數值型的進程號&#xff0c;操作系統的其他控制表可以通過進程號來交叉引用進程控制…

增加表單的文字段的html的代碼是,表單及表單新增元素(示例代碼)

要想更好運用表單就要了解表單的的更多元素與屬性&#xff0c;首先看看對表單基本了解。表單的基本了解 元素用于用戶輸入數據的收集元素是最重要的表單元素&#xff0c;有許多type其中是用于向表單處理程序提交表單的按鈕。元素 元素定義待選擇的下拉列表選項&#xff0c;元素…

給博客或站點加入百度統計

概述 記得剛接觸百度統計的時候&#xff0c;苦于沒有個人網站&#xff0c;不能加入統計代碼查看訪問量等數據。然后漸漸的忘了這件事。之前看別人博客中提及了百度統計&#xff0c;然后粗略的看了一下加入方法&#xff0c;覺得很驚喜&#xff0c;太簡單了&#xff01; 加入方法…

項目規劃管理

項目規劃管理 - 1 項目規劃是預測未來&#xff0c;確定要達到的目標&#xff0c;估計會碰到的問題&#xff0c;并提出實現目標、解決問題的有效方案、方針、措施和手段的過程。( 摘自百度百科) 大家應該都看過不少美國大片&#xff0c;是否記得很多片子里&#xff0c;特別是偷…

進程控制塊組織方式

進程控制塊PCB的組織方式1&#xff09;線性表方式&#xff1a;不論進程的狀態如何&#xff0c;將所有的PCB連續地存放在內存的系統區。這種方式適用于系統中進程數目 不多的情況。2&#xff09;索引表方式&#xff1a;該方式是線性表方式的改進&#xff0c;系統按照進…

android9叫什么名字,白猜這么多名字!谷歌Android 9.0正式發布:命名Android Pie

日前&#xff0c;谷歌對外公布了Android P的beta版&#xff0c;并向索尼Xperia XZ2、小米Mi Mix 2S、諾基亞7 Plus、Oppo R15 Pro、Vivo X21、一加6和Essential PH-1開放測試。今天&#xff0c;谷歌終于宣布正式發布Android 9.0的正式版本。據外媒GSMArena報道&#xff0c;今天…

靜態鏈接與動態鏈接

靜態鏈接是指把要調用的函數或者過程直接鏈接到可執行文件中&#xff0c;成為可執行文件的一部分。也就是函數和過程的代碼就在程序的可執行文件中&#xff0c;可執行文件包含了運行時所需的全部代碼。動態鏈接是指所調用的函數代碼并沒有被拷貝到應用程序的可執行文件中去&…

OpenCV 編程簡介(矩陣/圖像/視頻的基本讀寫操作)

PS. 由于csdn博客文章長度有限制&#xff0c;本文有部分內容被截掉了。 在OpenCV中文網站的wiki上有可讀性更好、并且是完整的版本&#xff0c;歡迎瀏覽。 OpenCV Wiki &#xff1a;《OpenCV 編程簡介&#xff08;矩陣/圖像/視頻的基本讀寫操作&#xff09;》 Introduction to…

再送一波干貨,測試2000線程并發下同時查詢1000萬條數據庫表及索引優化

原文:再送一波干貨&#xff0c;測試2000線程并發下同時查詢1000萬條數據庫表及索引優化繼上篇文章《絕對干貨&#xff0c;教你4分鐘插入1000萬條數據到mysql數據庫表&#xff0c;快快進來》發布后在博客園首頁展示得到了挺多的閱讀量&#xff0c;我這篇文章就是對上篇文章的千萬…

同步機制遵循的原則

進程在并發執行時為了保證結果的可再現性&#xff0c;各進程執行序列必須加以限制以保證互斥地使用臨界資源&#xff0c;相互合作完成任務。多個相關進程在執行次序上的協調稱為進程同步。用于保證多個進程在執行次序上的協調關系的相應機制稱為進程同步機制。 所有的進程同步機…

wps html編輯表格,WPS 2017個人版演示word使用技巧(wps2017表格使用技巧)

wps2017是一款非常深受用戶喜愛的辦公軟件。在2017這個新的版本中&#xff0c;依舊繼承了它之前兼容免費、體積小、多種界面切換、云辦公等眾多優秀的功能特點&#xff0c;下面小編就來教大家wps2017的使用方式使用技巧&#xff1a;一、wps2017個人版word使用技巧技巧一&#x…

ubuntu 解決“無法獲得鎖 /var/lib/dpkg/lock -open (11:資源暫時不可用)”的方法...

在ubuntu系統的termial下&#xff0c;用apt-get install 安裝軟件的時候&#xff0c;如果在未完成下載的情況下將terminal close。此時 apt-get進程可能沒有結束。結果&#xff0c;如果再次運行apt-get install 命令安裝如今&#xff0c;可能會發生下面的提示&#xff1a;無法獲…

es Update API

2019獨角獸企業重金招聘Python工程師標準>>> es Update API 博客分類&#xff1a; 搜索引擎&#xff0c;爬蟲 The update API allows to update a document based on a script provided. The operation gets the document (collocated with the shard) from the ind…

聰明人,容易不務實

聰明人擁有很多優勢。首先&#xff0c;聰明人的邏輯強、思路靈活&#xff0c;理解事物很快&#xff0c;因而經常很有創意。聰明人本身&#xff0c;也因為經常感覺到自己「快速理解、時有創意」的特質&#xff0c;認為沒有什么事情難得倒他。漸漸的&#xff0c;在看待任何事物時…

Linux 線程占用CPU過高定位分析

今天朋友問我一個Linux程序CPU占用漲停了&#xff0c;該如何分析&#xff0c; CPU占用過高&#xff0c;模擬CPU占用過高的情況 先上一段代碼&#xff1a; 1 #include <iostream>2 #include <thread>3 #include <vector>4 5 6 int main(int argc, char **argv…

計算機二級常備知識,2020年計算機二級Office考試必備題庫資料!

考試資料在手&#xff0c;考試不用愁&#xff01;領報名界面顯示計算機二級Office通過率僅21.07%&#xff0c;很多人認為是既費腦子又費時間的考試&#xff0c;可能是方法不對&#xff0c;導致花了很多時間還是考不過&#xff0c;剛剛收到3月考的二級證書啦&#xff0c;馬上還有…