並查集相關問題

2021-10-03 14:04:52 字數 2924 閱讀 8576

並查集的相關知識: c++ 並查集實現優化

// hard

給定乙個未排序的整數陣列,找出最長連續序列的長度。

要求演算法的時間複雜度為 o

(n)。

示例:輸入:

[100,4

,200,1

,3,2

]輸出:

4解釋: 最長連續序列是 [1,

2,3,

4]。它的長度為 4。

hash

具體做法

取出其左右相鄰數已有的連續區間長度 left 和 right

計算當前數的區間長度為:cur_length = left + right + 1

根據 cur_length 更新最大長度 max_length 的值

更新區間兩端點的長度值

int

longestconsecutive

(vector<

int>

& nums)

return res;

}

1.建立hash, 同時,我們只對 當前數字 - 1 不在雜湊表裡的數字,作為連續序列的第乙個數字去找對應的最長序列,這是因為其他數字一定已經出現在了某個序列裡。

int

longestconsecutive

(vector<

int>

& nums)

}return res;

}

並查集

並查集建立乙個並查集,和集合的個數

進行合併操作union,如果合併成功,集合個數減1 -1

如果合併失敗,說明這兩個計算機已經在乙個集合中,即 這個鏈結是乙個多餘的邊,記錄多餘邊的個數

最後遍歷完後, 統計 集合個數 和 多餘邊數,每乙個 多餘邊 可以消除(鏈結)乙個集合

集合個數==1,表示都在乙個集合中,全都可以互相鏈結 返回0

如果 多餘邊數 < 集合個數-1 則不能全部鏈結 返回-1

如果可以鏈結,直接返回 集合個數-1, 即全部鏈結需要的最小邊數

;

c++ 並查集 ,看了大佬的思路,才知道可以把行列 合併起來,=_= , 我是按照同行同列將 石頭鏈結起來,看存在幾個集合,每個集合都可以刪除到最後乙個石頭,所以可刪除的石頭就是 總石頭數 - 集合數

class dsu

intfind

(int a)

void

union_elem

(int a,

int b)}}

;class solution }}

return n-uf.cnt;}}

;

並查集相關問題

include 演算法題 1 已知有n個人構成的乙個集合,其中某些人與某些人直接是朋友關係。假定朋友關係具有傳遞性 朋友的朋友也是朋友 對稱性 相互是朋友 自反性 我是我自己的朋友 給定m組朋友關係,想要知道n個人中的任意兩個人是不是朋友關係。using namespace std typedef ...

並查集相關概念

前言 並查集這三個字,取自合併 查詢 集合。顧名思義,並查集支援兩種操作 合併和查詢 並查集的實現是乙個陣列,每個下標對應著它的父節點 int pre 100 並查集的初始化 初始化每個都是根節點,即自己的父節點就是自己,表明自己是根節點 for int i 0 i n i 並查集的查詢 並查集的查...

並查集問題

輸入 第一行 城鎮數目n,道路數目m 接下的每一行表示 某條道路連線的城鎮號 輸出 至少還需要建設的道路數目,才能將所有的城鎮連線起來 例子 輸入 3 31 2 1 22 1 輸出 1解釋 要使城鎮123連通,還需要修建23之間的連通路 即還需要修建一條路 cpp實現問題求解 include usi...