class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer>set=new HashSet<>();
for(int num:nums){
set.add(num);
}
int ans=0;
for(int x:set){
if(set.contains(x-1)){
continue;
}
int y=x+1;
while(set.contains(y)){
y++;
}
ans=Math.max(ans,y-x);
if(ans*2>=set.size()){
break;
}
}
return ans;
}
}
- 要去遍历哈希表而不是原数组,因为原数组会有很多重复的,导致多次计算
- 不使用sort排序,因为使用了就是O(logN)复杂度,那么是通过一个特判:x-1是否在哈希表中,如果存在就不用这个作为起初的判断,也算是变相的去找到一个连续序列的最开始的那个元素
- 因为在Set里面元素唯一,那么当我们检测到ans*2>=set.size(),那么就不可能再有另外一个连续的序列长度能比这个更长,所以直接结束循环,避免多余的查找