题目
题解一:HeshSet+枚举
思路:先对数组进行set去重,核心就是,先找出临界值(假设以最小临界为例,那么这个临界值自己就是最小值,),以临界值不断做加1操作,看加一后的数是否在set集合中没,如果在,继续做加一做对比操作,更新最长连续序列长度。
代码:
public int longestConsecutive(int[] nums) {
//用于对数组去重
Set<Integer> numset = new HashSet<>();
for(int n:nums){
numset.add(n);
}
//记录最长数字连续序列
int longMax = 0;
//先找出临界最小的数(减一的数不存在set集合中),
//然后让最小的数循环做加一操作,看加1后的数是否在set集合当中,是就更新长度,直到不在连续,
for(int nux :numset){
//先找出临界最小的数(减一的数不存在set集合中),
if(!numset.contains(nux-1)){
//找到最小临界值
int curnux = nux;
//记录起始长度
int length = 1 ;
// 循环做加一操作,看加1后的数是否在set集合当中,是就更新长度,直到不在连续,
while(numset.contains(curnux+1)){
length += 1;//更新长度
curnux += 1;//加一找下一个连续数是否在set集合中
}
//每次length与longMax比较 取最大就是当前nux最长数字连续序列
longMax =Math.max(longMax,length);
}
}
return longMax;
}