問題描述
給定一個未排序的整數數組,找出最長連續序列的長度。在這裏插入代碼片
要求算法的時間複雜度爲 O(n)。
示例:
輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度爲 4。
解決思路
1、將所有數組裝進HashSet中,HashSet的查詢時間複雜度爲O(1)
2、對數組中每一個元素進行檢查
3、如果沒有小於當前元素的數,當前元素肯定就是起點
4、從起點處在HashSet裏找連續的數
代碼
class Solution {
public int longestConsecutive(int[] nums) {
HashSet<Integer> set=new HashSet<>();
for(int i=0;i<nums.length;i++){
set.add(nums[i]);
}
int maxLen=0;//記錄最長序列的長度
for(int i=0;i<nums.length;i++){
//找到連續序列的起點
if(!set.contains(nums[i]-1)){
int count=1;//記錄序列元素數量
int cur=nums[i];//當前元素
while(set.contains(cur+1)){
count++;
cur++;
}
if(count>maxLen){
maxLen=count;
}
}
}
return maxLen;
}
}