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中找不到,記錄當前的長...