题目
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
关键是使用哈希表存储。
O(N)复杂度:一个序列为x,x+1,x+2,…,x+y,那么对于x+1,x+2,…,x+y这个序列没有必要判断,因此对于当前遍历到的值X,可以先判断哈希表中是否存在X-1,如果不存在,才对该值进行判断,通过while循环判断存在多长的连续序列。
class Solution {
public int longestConsecutive(int[] nums) {
HashSet<Integer> st=new HashSet<Integer>();
for(int num:nums){
st.add(num);
}
int maxLen=0;
for(int num:nums){
if(!st.contains(num-1)){
int cur=num;
int k=1;
while(st.contains(cur+1)){
cur++;
k++;
}
maxLen=maxLen<k?k:maxLen;
}
}
return maxLen;
}
}