leetcode中有關並查集的題目不多,這裡現列舉一道簡單的題目,理解並查集的思想。
[b]longest consecutive sequence[/b]
給定乙個未排序的整型陣列,找出最長的連續子串行。要求時間複雜度為o(n)。
例如:給定nums =
輸出:4 最長連續子串行為(1,2,3,4)
我們用雜湊處理元素是否被訪問過,然後從第乙個元素開始,分別檢查它兩邊的元素,也就是對它進行加1和減1的操作,檢查雜湊表中是否存在,記錄最大的個數。這就好像以節點構造了幾棵樹,只要找到最大的那棵樹就是結果了。**如下:
public class solution
hm.put(nums[i], 1);
while(hm.containskey(nums[i] + left))
while(hm.containskey(nums[i] + right))
max = math.max(count, max);
}return max;}}
並查集 總結
自己學完後總結一下吧,並查集,我的理解就是乙個查詢與合併,用乙個find函式來查詢自己的祖先也就是根節點,在這過程中還可以進行路徑壓縮,就是讓這個點直接變到根節點之下,還有就是合併,找出這兩個點的根節點,如果根節點不相同的話,就將乙個根節點放到另乙個根節點下面。這道題的就是用並查集做,找出總共有幾個...
並查集總結
用自己的理解來寫好了 有些地方可能不對 不定時更新理解 操作主要為三步 一 初始化 void init 二 查詢 這個為路徑壓縮 就是每次查詢時更新 查詢節點 x 上面所有節點直接使他們連向根節點 每次查詢更新 int find int x 另一種路徑壓縮 不過麻煩了些 作為理解 int find ...
並查集總結
注 此博文是在老師上課之後總結的,屬於課堂筆記,大部分摘自老師提供的課件。並查集總結總結兩點就是 並 和 查 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。集就是讓每個元素構成乙個單元素的集合,也就是按一定順序將屬於同一組...