力扣題解系列 128 最長連續序列

2021-10-06 21:06:23 字數 1376 閱讀 4019

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

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

輸入:

[100,4

,200,1

,3,2

]輸出:

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

2,3,

4]。它的長度為 4。

對於在陣列中的元素i,若i-1或者i+1也在陣列中,則它們在乙個連續序列中。但是同時考慮i-1i+1就比較麻煩,而且在陣列中查詢元素的時間複雜度為o(n),不滿足題目要求。於是可以只考慮i+1,這樣做的前提條件是找到每個連續序列的最小值,只在最小值的元素上進行遍歷。所有可以用下面的**來找到最小值:

for num in num_set:

if num -

1not

in num_set:

# 這裡是為了找到陣列中所有可能的連續序列的最小值

就是說只遍歷i-1不在原陣列中存在的元素i,這樣可以保證每個i都是連續序列的最小值。同時,把陣列轉換成集合,在集合中查詢的平均時間複雜度為o(1)可以滿足題目要求。

class

solution

:def

longestconsecutive

(self, nums)

: longest_streak =

0 num_set =

set(nums)

# 轉換成集合同時去重,集合查詢的平均時間複雜度為o(1)

for num in num_set:

if num -

1not

in num_set:

# 這裡是為了找到陣列中所有可能的連續序列的最小值

current_num = num

current_streak =

1while current_num +

1in num_set:

# 找到連續子串行的最小值之後,這裡遍歷計算長度

current_num +=

1 current_streak +=

1 longest_streak =

max(longest_streak, current_streak)

# 更新最長連續子串行的長度

return longest_streak

**參考

128 最長連續序列 力扣

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

LeetCode 力扣 128 最長連續序列

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

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

128.最長連續序列 難度 困難 標籤 並查集 給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。思路 運用並查集,使用hashmap fatherset k...