【算法】【线性表】最长连续序列

发布时间 2023-12-11 21:51:58作者: 酷酷-

1  题目

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

样例 1:

输入:

num = [100, 4, 200, 1, 3, 2]

输出:

4

解释:这个最长的连续序列是 [1, 2, 3, 4]. 返回所求长度 4

2  解答

public class Solution {
    /**
     * @param num: A list of integers
     * @return: An integer
     */
    public int longestConsecutive(int[] num) {
        // write your code here
        // 1、当数组为空或者无元素时
        if (num == null || num.length == 0) {
            return 0;
        }
        // 2、将num放置进set中用于快速判断
        Set<Integer> numSet = new HashSet<>(num.length);
        for (int i : num) {
            numSet.add(i);
        }

        int res = 1;
        for (int i : num) {
            // 从下、上判断当前的连续性
            // remove 是关键 能降低复杂度
            int down = i - 1;
            int up = i + 1;
            int acc = 1;
            while (numSet.contains(down)) {
                acc++;
                numSet.remove(down);
                down--;
            }
            while (numSet.contains(up)) {
                acc++;
                numSet.remove(up);
                up++;
            }
            res = Math.max(res, acc);
        }
        return res;
    }
}