128. 最长连续序列

image

128. 最长连续序列

思路

  1. 将所有元素放入一个 HashSet 中,用于快速查找是否存在某个数字。

  2. 遍历每个数字时,判断它是否是一个序列的起点:

    • 如果 num - 1 不存在于集合中,则说明 num 是一个潜在序列的起点。
  3. 从该起点开始向后扩展,统计当前连续序列的长度。

  4. 维护最大长度即可。

复杂度分析

  • 时间复杂度:O(n)
    每个元素最多被访问两次(一次在哈希集合遍历中,一次在序列扩展中),整体为线性时间。
  • 空间复杂度:O(n)
    哈希集合存储了所有元素,占用额外空间。

代码

import java.util.*;

public class LongestConsecutiveSequence {
    public int longestConsecutive(int[] nums) {
        Set<Integer> numSet = new HashSet<>();
        for (int num : nums) {
            numSet.add(num);
        }

        int longest = 0;

        for (int num : numSet) {
            // 只处理作为连续序列起点的数字
			// 不包含num - 1,则说明不是起点,不需要统计连续长度
            if (!numSet.contains(num - 1)) {
                int currentNum = num;
                int currentLength = 1;

                // 向后扩展
                while (numSet.contains(currentNum + 1)) {
                    currentNum++;
                    currentLength++;
                }

                // 更新最长长度
                longest = Math.max(longest, currentLength);
            }
        }

        return longest;
    }
}

posted @ 2025-08-09 00:11  quanht  阅读(19)  评论(0)    收藏  举报