LC 128哈希表中等第 23 / 95 题

最长连续序列

Longest Consecutive Sequence

哈希表序列起点
本机进度仅保存在当前浏览器

题目描述

给定一个未排序的整数数组 nums,找出数字连续的最长序列(如 1, 2, 3, 4)的长度。不要求序列元素在原数组中连续。请设计 O(n) 的算法。

示例:nums = [100, 4, 200, 1, 3, 2],最长连续序列为 [1, 2, 3, 4],输出 4。

解题思路

  1. 排序后扫描是 O(n log n),达不到要求;用哈希集合把"查某个数在不在"降到 O(1)。
  2. 关键去重技巧:只有当 x - 1 不在集合中时,x 才是某条连续序列的起点,只从起点向后数。
  3. 这样每条序列只被完整遍历一次,所有元素总访问次数仍是 O(n),避免了重复计数导致的 O(n^2)。

参考实现

查看参考实现Python · 建议先自行作答
def longestConsecutive(nums):
    num_set = set(nums)
    best = 0
    for x in num_set:
        # 只从序列起点向后统计
        if x - 1 in num_set:
            continue
        cur = 1
        while x + cur in num_set:
            cur += 1
        best = max(best, cur)
    return best

复杂度与归属

时间复杂度O(n)
空间复杂度O(n)
所属分类哈希表
题源LeetCode 128

关联教程

返回题图鉴