题目
题解一: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;}