LeetCode 最長連續序列(雜湊表 並查集)

2021-10-06 21:16:50 字數 807 閱讀 4873

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

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

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

輸出: 4

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

難點主要就是時間複雜度要求o(n)

從小到大排序

遍歷陣列,比較相鄰的兩項,如果相同,則跳過,繼續遍歷下一項

如果 當前項+1 等於 下一項,說明遇到連續項,count +1

否則,說明連續中斷,將 count 重置為 1

但是時間複雜度o(nlogn)不符合要求

使用額外的空間o(n)雜湊表儲存數字,查詢的時候就會變成o(1)

set 查詢元素的時間複雜度是 o(1),js 的 set 能給陣列去掉重複元素

將陣列元素存入 set 中,遍歷陣列 nums

如果 nums[i] - 1 存在於 set ,說明 nums[i] 不是連續序列的起點,跳過,繼續遍歷

當前項沒有「左鄰居」,它就是連續序列的起點

不斷在 set 中檢視 cur + 1 是否存在,存在,則 count +1

cur 不再有 「右鄰居」 了,就算出了一段連續序列的長度

class

solution

int max_len =0;

for(

int num:num_set)

if(cur_len>max_len) max_len =cur_len;}}

return max_len;}}

;

leetcode128 最長連續序列

給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。建立乙個dict,如果num不在裡面就檢視左右連續長度,再給num和左右處賦值 class solution...

Leetcode 128 最長連續序列

給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。複製 這道題目最開始大家想的肯定是sort,然後計數計算最長序列。但是要求時間複雜度為 o n 就不能用so...

LeetCode128 最長連續序列

原題目給定乙個未排序的整數陣列,找出最長連續序列的長度。要求演算法的時間複雜度為 o n 示例 輸入 100,4,200,1,3,2 輸出 4 解釋 最長連續序列是 1,2,3,4 它的長度為 4。題目分析 方法一 排序直接查詢法 先對陣列進行快排,然後從開始開始比較前後兩者是否相差1,相差1則計數...