【LeetCode-中等题】128. 最长连续序列

题目

【LeetCode-中等题】128. 最长连续序列_第1张图片

题解一:HeshSet+枚举

思路:先对数组进行set去重,核心就是,先找出临界值(假设以最小临界为例,那么这个临界值自己就是最小值,),以临界值不断做加1操作,看加一后的数是否在set集合中没,如果在,继续做加一做对比操作,更新最长连续序列长度。

【LeetCode-中等题】128. 最长连续序列_第2张图片

代码:

 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;
    }

你可能感兴趣的:(力扣,#,中等题,leetcode,算法,职场和发展)