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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

133. Clone Graph 克隆图

發布時間:2024/5/7 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 133. Clone Graph 克隆图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給你無向 連通 圖中一個節點的引用,請你返回該圖的 深拷貝(克隆)。

圖中的每個節點都包含它的值 val(int) 和其鄰居的列表(list[Node])。

class Node {public int val;public List<Node> neighbors; }

測試用例格式:

簡單起見,每個節點的值都和它的索引相同。例如,第一個節點值為 1(val = 1),第二個節點值為 2(val = 2),以此類推。該圖在測試用例中使用鄰接列表表示。

鄰接列表 是用于表示有限圖的無序列表的集合。每個列表都描述了圖中節點的鄰居集。

給定節點將始終是圖中的第一個節點(值為 1)。你必須將 給定節點的拷貝 作為對克隆圖的引用返回。

示例 1:


輸入:adjList = [[2,4],[1,3],[2,4],[1,3]]
輸出:[[2,4],[1,3],[2,4],[1,3]]
解釋:
圖中有 4 個節點。
節點 1 的值是 1,它有兩個鄰居:節點 2 和 4 。
節點 2 的值是 2,它有兩個鄰居:節點 1 和 3 。
節點 3 的值是 3,它有兩個鄰居:節點 2 和 4 。
節點 4 的值是 4,它有兩個鄰居:節點 1 和 3 。

示例 2:

輸入:adjList = [[]]
輸出:[[]]
解釋:輸入包含一個空列表。該圖僅僅只有一個值為 1 的節點,它沒有任何鄰居。

示例 3:

輸入:adjList = []
輸出:[]
解釋:這個圖是空的,它不含任何節點。

示例 4:

輸入:adjList = [[2],[1]]
輸出:[[2],[1]]

提示:

  • 節點數不超過 100 。
  • 每個節點值 Node.val 都是唯一的,1 <= Node.val <= 100。
  • 無向圖是一個簡單圖,這意味著圖中沒有重復的邊,也沒有自環。
  • 由于圖是無向的,如果節點 p 是節點 q 的鄰居,那么節點 q 也必須是節點 p 的鄰居。
  • 圖是連通圖,你可以從給定節點訪問到所有節點。
  • DFS

    題目只給了我們一個節點的引用,因此為了知道整張圖的結構以及對應節點的值,我們需要從給定的節點出發,進行「圖的遍歷」,并在遍歷的過程中完成圖的深拷貝。

    為了避免在深拷貝時陷入死循環,我們需要理解圖的結構。對于一張無向圖,任何給定的無向邊都可以表示為兩個有向邊,即如果節點 A 和節點 B 之間存在無向邊,則表示該圖具有從節點 A 到節點 B 的有向邊和從節點 B 到節點 A 的有向邊。

    為了防止多次遍歷同一個節點,陷入死循環,我們需要用一種數據結構記錄已經被克隆過的節點。

    Code

    class Solution:def __init__(self):self.visited = {}def cloneGraph(self, node: 'Node') -> 'Node':if not node:return nodeif node in self.visited:return self.visited[node]cloneNode = Node(node.val, [])self.visited[node] = cloneNodeif node.neighbors:cloneNode.neighbors = [self.cloneGraph(n) for n in node.neighbors]return cloneNode

    復雜度分析

    • 時間復雜度:O(N)O(N)O(N),其中 NNN 表示節點數量。深度優先搜索遍歷圖的過程中每個節點只會被訪問一次。

    • 空間復雜度:O(N)O(N)O(N)。存儲克隆節點和原節點的哈希表需要 O(N)O(N)O(N) 的空間,遞歸調用棧需要 O(H)O(H)O(H) 的空間,其中 HHH 是圖的深度,經過放縮可以得到 O(H)=O(N)O(H) = O(N)O(H)=O(N),因此總體空間復雜度為 O(N)O(N)O(N)

    總結

    以上是生活随笔為你收集整理的133. Clone Graph 克隆图的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。