力扣第128題最長的連續序列

2021-10-06 20:32:59 字數 1088 閱讀 4681

128.最長連續序列

難度:困難

標籤:並查集

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

要求演算法的時間複雜度為 o(n)。

示例:輸入: [100, 4, 200, 1, 3, 2]

輸出: 4

解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度為 4。

思路:運用並查集,使用hashmap fatherset key是陣列的值,value是key的父結點

初始化時,一共n個樹。還有乙個hashmap size 放的是每棵樹的大小結點個數

遍歷陣列,然後把判斷nums[i]-1是否在 fatherset中 在的話,合併兩個結點,合併的時候,需要更新最大的樹的結點個數

public

intlongestconsecutive

(int

nums)

}return uf.max;

}class

uf count=nums.length;

}public

intfind

(int p)

return father;

}public

void

union

(int p,

int q)

else

count--

;}

準備乙個hashset,將所有的num放入到裡面

遍歷時,只有當num-1不在set裡面時,說明出現了新的序列

就尋找這個序列的長度,然後更新最大的長度

public

intlongestconsecutive

(int

nums)

int longeststreak =0;

for(

int num : num_set)

longeststreak = math.

max(longeststreak, currentstreak);}

}return longeststreak;

}

128 最長連續序列 力扣

題意理解 給定乙個未排序陣列,求最大連續數字的長度。這個連續數字可以任意位置。問題分析 方法1 排序 遍歷 遍歷要點是記錄連續的數字,我用的方法是和前一位比,如果比前一位大1,長度 1,如果相等,不做處理,其他情況,拿當前長度更新最大值,重置當前值為1.方法複雜度是o nlogn 方法2 集合 遍歷...

力扣LeetCode 128題 最長連續序列

題目 給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。要找連續序列的長度,從結果可以看出,主要是為了排序,排序之後,遍歷結果就可以進行連續長度的更新。但是排...

LeetCode 力扣 128 最長連續序列

給乙個陣列,求出連續的數字最多有多少個,時間複雜度要求是o n 首先想一下最直接的暴力破解。我們可以用乙個hashset把給的陣列儲存起來。然後再考慮陣列的每個數,比如這個數是n,然後看n 1在不在hashset中,然後再看n 2在不在,接下來n 3 n 4直到在hashset中找不到,記錄當前的長...