128. 最长连续序列

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> numset = new HashSet<>();
        for(int num : nums){
            numset.add(num);
        }
        int res = 0;
        int count = 0;
        for(int num : nums){
            int tem = num;
            if(!numset.contains(tem - 1)){
                //当前数为序列的开始
                count = 1;
                //每个数字最多被访问两次 98765,5先进入循环被访问,然后6,7,8,9各一次。加上外层的for一次,共2次。
                //contains —— O(1)
                while(numset.contains(tem + 1)){
                    count++;
                    tem++;
                }
                res = Math.max(res,count);
            }
        }
        return res;
    }
}
一回生,二回熟
原文地址:https://www.cnblogs.com/zzytxl/p/12691757.html