Skip to content

最长连续序列

最长连续序列(Longest Consecutive Sequence)要求在给定的未排序整数数组中,找出最长的连续序列(可以是递增或递减),并返回其长度。

import java.util.HashSet;

public class LongestConsecutiveSequence {
    public int longestConsecutive(int[] nums) {
        HashSet<Integer> set = new HashSet<>();
        int longestStreak = 0;

        // 先将所有数字存入HashSet中,方便快速查找
        for (int num : nums) {
            set.add(num);
        }

        // 遍历数组中的每个数字
        for (int num : nums) {
            // 如果当前数字是某个连续序列的起点(即前一个数字不在HashSet中)
            if (!set.contains(num - 1)) {
                int currentNum = num;
                int currentStreak = 1;

                // 继续检查当前数字之后的数字是否在HashSet中,直到找到不在的为止
                while (set.contains(currentNum + 1)) {
                    currentNum++;
                    currentStreak++;
                }

                // 更新最长连续序列的长度
                longestStreak = Math.max(longestStreak, currentStreak);
            }
        }

        return longestStreak;
    }
}

解释每一步:

  1. 我们首先使用HashSet将给定的整数数组存储起来,这样可以快速地判断一个数字是否在数组中。

  2. 接下来,我们遍历数组中的每个数字。

  3. 对于每个数字,我们检查它是否是某个连续序列的起点(即前一个数字不在HashSet中)。

  4. 如果是起点,我们从当前数字开始,一直向后查找连续的数字,直到找到不在HashSet中的数字为止,这个过程中记录连续序列的长度。

  5. 更新最长连续序列的长度。

  6. 最后,返回最长连续序列的长度。

这种解法的时间复杂度为O(n),其中n为数组的长度,因为我们只需遍历一次数组。空间复杂度也为O(n),因为需要使用HashSet来存储数组中的元素。