【LeetCode最详尽解答】128_最长连续序列 Longest-Consecutive-Sequence

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!

链接:

直觉

  • 输入: nums = [100, 4, 200, 1, 3, 2]
  • 输出: 4
  • 解释: 最长的连续元素序列是 [1, 2, 3, 4]。因此它的长度是 4

首先,我们需要找到每个递增序列的起始位置,并且舍弃重复的值。所以先使用 set(nums)nums 转换为一个集合。集合中的每个值可能是起始位置,也可能只是序列的一部分。我们只需要找到起始值。

考虑列表 [1, 2, 3, 4, 5, 6]。如果不只找起始点,它会计算从 1-62-63-6 等开始的序列,导致 ( O ( n 2 ) (O(n^2) (O(n2) 的复杂度。为了确保线性时间复杂度,我们需要仅识别每个间隔的起始点。

当遇到一个值时,如果 n-1 在集合中,跳过它,因为它不是起始位置。如果 n-1 不在集合中,说明 n 是一个起始值,我们将长度初始化为 1。当 n + length 在集合中时,长度加 1。然后,将结果更新为 length 和当前结果中的最大值。

方法

我们将找到每个起始位置,并使用哈希集合存储 nums 的所有值。当我们找到一个起始位置时,我们将从这个位置计算序列的长度。然后,更新最终结果并返回它。

找到起始位置:

  • 如果 n-1 不在 numset 中,那么 n 是一个起始位置。
  • 将长度初始化为 1
  • n + lengthnumset 中时,我们增加长度。
  • 最后,用找到的最长长度更新结果。

复杂度

  • 时间复杂度:
    O ( n ) O(n) O(n)

    • 创建集合: O ( n ) O(n) O(n)
    • 遍历列表: O ( n ) O(n) O(n)
    • 检查序列的起始点并计算长度: O ( n ) O(n) O(n)
  • 空间复杂度:
    O ( n ) O(n) O(n)

    • 集合的空间: O ( n ) O(n) O(n)
    • 其他变量的空间: O ( 1 ) O(1) O(1)

代码

class Solution(object):
    def longestConsecutive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        numset = set(nums)
        longest = 0
        for n in nums:
            # calculate just from the starting position
            if n-1 not in numset:
                length = 1
                while n + length in numset:
                    length+=1
                longest = max(longest, length)
        return longest

相关推荐

  1. [leetcode]longest-consecutive-sequence 连续序列

    2024-06-16 22:12:03       34 阅读
  2. Leetcode128.连续序列

    2024-06-16 22:12:03       51 阅读
  3. leetCode 128.连续序列

    2024-06-16 22:12:03       56 阅读
  4. LeetCode 128 连续序列

    2024-06-16 22:12:03       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 22:12:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 22:12:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 22:12:03       82 阅读
  4. Python语言-面向对象

    2024-06-16 22:12:03       91 阅读

热门阅读

  1. 在 PHP 中怎样实现实时数据推送功能?

    2024-06-16 22:12:03       30 阅读
  2. 2813. 子序列最大优雅度 Hard

    2024-06-16 22:12:03       31 阅读
  3. springcloud入门与实践

    2024-06-16 22:12:03       24 阅读
  4. Python编程:从入门到实践(第3版)

    2024-06-16 22:12:03       40 阅读
  5. 大厂笔试真题讲解—美团23—小美的蛋糕切割

    2024-06-16 22:12:03       29 阅读
  6. C# 程序结构

    2024-06-16 22:12:03       30 阅读
  7. SQL MAX() 函数深入解析

    2024-06-16 22:12:03       29 阅读
  8. 鸿蒙开发:【PageAbility组件概述+配置】

    2024-06-16 22:12:03       29 阅读