算法-數組的最長連續序列長度
1、數組的最長連續序列長度
題目是Hard級別的,因爲我們要把時間複雜度降低到n
給定一個未排序的整數數組,找出最長連續序列的長度。
要求算法的時間複雜度爲 O(n)。
示例:
輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度爲 4。
看到這個題目,首先想到的就是排個序,找連續序列,但是時間複雜度不滿足要求
但是藉助HashSet我們可以做到n
1、遍歷數組,放入HashSet
2、遍歷數組,看小於當前元素的值n-1是不是在HashSet裏面,如果不是,我們計算以當前值n開頭的連續序列長度
3、由於我們只會從序列開頭遍歷,因此每個元素訪問了一次,所以,時間複雜度爲n
public int longestConsecutive(int[] nums) {
Set<Integer> set=new HashSet<>();
for(int n:nums){
set.add(n);
}
int maxLen=0;
for(int n:nums){
if(!set.contains(n-1)){//判斷元素是不是數列開頭
int count=0;
while(set.contains(n++)){//判斷序列是否到頭了
count++;
}
maxLen=maxLen>count?maxLen:count;
}
}
return maxLen;
}