LeetCode 85 冗餘連線 II

2021-10-01 17:39:47 字數 2702 閱讀 3224

題目: 

在本問題中,有根樹指滿足以下條件的有向圖。該樹只有乙個根節點,所有其他節點都是該根節點的後繼。每乙個節點只有乙個父節點,除了根節點沒有父節點。

輸入乙個有向圖,該圖由乙個有著n個節點 (節點值不重複1, 2, ..., n) 的樹及一條附加的邊構成。附加的邊的兩個頂點包含在1到n中間,這條附加的邊不屬於樹中已存在的邊。

結果圖是乙個以組成的二維陣列。 每乙個的元素是一對[u, v],用以表示有向圖中連線頂點uandv和頂點的邊,其中父節點u是子節點v的乙個父節點。

返回一條能刪除的邊,使得剩下的圖是有n個節點的有根樹。若有多個答案,返回最後出現在給定二維陣列的答案。

示例:

輸入: [[1,2], [1,3], [2,3]]

輸出: [2,3]

解釋: 給定的有向圖如下:

1/ \

v v

2-->3

輸入: [[1,2], [2,3], [3,4], [4,1], [1,5]]

輸出: [4,1]

解釋: 給定的有向圖如下:

5 <- 1 -> 2

^ |

| v

4 <- 3

題解:

在以上題目中有一句比較關鍵的句子 :該圖由乙個有著n個節點 (節點值不重複1, 2, ..., n) 的樹及一條附加的邊構成。附加的邊

的兩個頂點包含在1到n中間,這條附加的邊不屬於樹中已存在的邊。

這句話其實是引導我們思路的,我們可以知道題目所說的有根樹具有三個性質。第一,有根樹存在入度為0的節點(根節點),第二有根樹除了

根節點其他節點的入度都為1。第三有根樹所有節點都是連通的。

如若一顆有根樹加上一條邊的話,那麼加上的邊存在以下三種情況:

1)邊的兩端是同一節點

判定方式 : 直接看兩遍是否相等

處理 : 直接可以知道這條邊肯定不是原有的,返回當前邊

2)兩端不是同一節點,並且被指向的是根節點。

判定方式 : 如若被指向的那端統計之後出現了所有節點或者不存在入度為2的節點

處理 : 因為根被指向了後一定會形成環,故而處理的可能性很多(除去環內任意邊),但是需要注意是否存在示例2中的情況,如若除去邊[1,5],就會導致該有根樹不連通,並且依然有環。 因為是否連通使用並查集很容易檢測是否連通

,故而這裡我選擇了直接使用並查集。

3)兩端不是同一節點,並且被指向的是非根節點。

判定方式 : 剩下的情況都是3)//存在入度為2的節點

處理 : 因為存在入度為2的節點,所以在這就是在兩條指向入度為2節點內直接二選一,但是這裡不能隨便選,必須保證如若因為這條邊成環(例如示例一加上乙個節點4並且4指向2),也就是 : [[4, 2],[1,2], [1,3], [2,3]]

,這時指向2的一共有兩個節點 4 和 1,這時候如若選擇刪除[1,2]則會導致整張圖不連通,故而需要檢查連通性來選擇刪除兩個節點的哪個,依然使用並查集。

**:

1

intn;

2public

int findredundantdirectedconnection(int

edges)

11int index = edges[i][1] - 1;

12if (table[index] != -1) else17}

18//

如若指向非根

19if (other != -1)

26for (int i = n - 1; i >= 0; i--) 31}

32return

newint

{};33}

3435

/**36

* 若除去第i條邊

37*

38*

@param

edges

39*

@parami40

* @return

41*/

42int

table;

4344

public

boolean isconnected(int edges, int

i) 49

for (int j = 0; j < n; j++)

53boolean flag = true;54

for (int k = 0; k < n; k++) else61}

62}63return

true;64

}6566public

boolean union(int i, int

j) 72 table[iindex] =jindex;

73return

true;74

}7576public

int find(int

i) 80

return

i;81 }

LeetCode 85 冗餘連線 II

題目 在本問題中,有根樹指滿足以下條件的有向圖。該樹只有乙個根節點,所有其他節點都是該根節點的後繼。每乙個節點只有乙個父節點,除了根節點沒有父節點。輸入乙個有向圖,該圖由乙個有著n個節點 節點值不重複1,2,n 的樹及一條附加的邊構成。附加的邊的兩個頂點包含在1到n中間,這條附加的邊不屬於樹中已存在...

LeetCode 85 最大矩形

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 6此題和上一題的擴充套件,此題給的二維矩陣的每一行向上都形成了乙個直方圖,所以二維矩陣有多少行,就有多少個直方圖...

leetcode85 最大矩形

1.轉換成直方圖的做法 參考 利用leetcode84中的方法來做 首先要將給定的01矩陣轉換成84中的直方圖的樣子。每一行都對應乙個直方圖,且下一行直方圖是由上一行直方圖計算得到的。如果是0,則當前直方圖高為0,如果是1,則當前直方圖高度是上一層對應位置高度 1 1 0 1 0 0 1,0 1,0...