128. 最长连续序列

110 阅读1分钟

128. 最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n)的算法解决此问题。

示例 1:

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

示例 2:

输入: nums = [0,3,7,2,5,8,4,6,0,1]
输出: 9

提示:

  • 0 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

代码

知识点:哈希表

def longestConsecutive(nums):
    n = len(nums)
    # 特判
    if n == 0:
        return 0

    s = set(nums) # 查询快
    ans = 1
    # 遍历哈希表
    for i in s:
        if i - 1 not in s:
            # 找到没有后一个值的值作为起点
            start = i
            curlen = 1

            # 往前加
            while start + 1 in s:
                start += 1
                curlen += 1

            ans = max(ans,curlen) # 加到没得加了就存一下值

    return ans