Leetcode 128. 最长连续序列

  1. 最长连续序列
    给定一个未排序的整数数组 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 <= 105

-109 <= nums[i] <= 109

对于数组中存在的连续序列,为了统计每个连续序列的长度,我们希望直接定位到每个连续序列的起点,从起点开始遍历每个连续序列,从而获得长度。

那么如何获取到每个连续序列的起点呢,或者说什么样的数才是一个连续序列的起点?

答案是这个数的前一个数不存在于数组中,因为我们需要能够快速判断当前数num的前一个数num - 1是否存在于数组中。

同时当我们定位到起点后,我们就要遍历这个连续序列,什么时候是终点呢?

答案是当前数num的后一个数nunm + 1不存在于数组中,因此我们需要能够快速判断当前数num的后一个数num + 1是否存在于数组中。

为了实现上述需求,我们使用哈希表来记录数组中的所有数,以实现对数值的快速查找。

python:

python 复制代码
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        res = 0     # 记录最长连续序列的长度
        num_set = set(nums)     # 记录nums中的所有数值
        for num in num_set:
            # 如果当前的数是一个连续序列的起点,统计这个连续序列的长度
            if (num - 1) not in num_set:
                seq_len = 1     # 连续序列的长度,初始为1
                while (num + 1) in num_set:
                    seq_len += 1
                    num += 1    # 不断查找连续序列,直到num的下一个数不存在于数组中
                res = max(res, seq_len)     # 更新最长连续序列长度
        return res
相关推荐
历程里程碑1 小时前
LeetCode热题11:盛水容器双指针妙解
c语言·数据结构·c++·经验分享·算法·leetcode·职场和发展
Jay_Franklin7 小时前
SRIM通过python计算dap
开发语言·python
是一个Bug7 小时前
Java基础50道经典面试题(四)
java·windows·python
吴佳浩8 小时前
Python入门指南(七) - YOLO检测API进阶实战
人工智能·后端·python
wadesir8 小时前
Rust中的条件变量详解(使用Condvar的wait方法实现线程同步)
开发语言·算法·rust
yugi9878388 小时前
基于MATLAB实现协同过滤电影推荐系统
算法·matlab
TimberWill8 小时前
哈希-02-最长连续序列
算法·leetcode·排序算法
liliangcsdn8 小时前
python下载并转存http文件链接的示例
开发语言·python
Morwit8 小时前
【力扣hot100】64. 最小路径和
c++·算法·leetcode
leoufung8 小时前
LeetCode 373. Find K Pairs with Smallest Sums:从暴力到堆优化的完整思路与踩坑
java·算法·leetcode