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
相关推荐
qq_4856689910 分钟前
算法习题--蓝桥杯
算法·职场和发展·蓝桥杯
m0_6760995811 分钟前
数据结构--创建链表--Python
数据结构·python·链表
waves浪游13 分钟前
类和对象(中)
c语言·开发语言·数据结构·c++·算法·链表
做人不要太理性17 分钟前
【算法一周目】滑动窗口(2)
c++·算法·leetcode·哈希算法·散列表·滑动窗口
青い月の魔女17 分钟前
数据结构初阶---复杂度
c语言·数据结构·笔记·学习·算法
汤姆和杰瑞在瑞士吃糯米粑粑17 分钟前
【优先算法学习】双指针--结合题目讲解学习
c++·学习·算法
m0_5474866619 分钟前
数据结构试题库1
java·数据结构·算法
多多*20 分钟前
后端并发编程操作简述 Java高并发程序设计 六类并发容器 七种线程池 四种阻塞队列
java·开发语言·前端·数据结构·算法·状态模式
摆烂小白敲代码32 分钟前
【算法】连通块问题(C/C++)
c语言·数据结构·c++·算法·深度优先·图论·广度优先
搬砖的果果37 分钟前
HTTP代理是什么,主要用来干嘛?
网络·python·网络协议·tcp/ip·http