LeetCode 128. 最长连续序列

题目

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

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

方法
  • maxLength 记录最长数字连续序列的长度
  • numSet 记录数组 nums 的无序不重复元素集
  • 循环遍历 numSet
    • 若数字 i 的上一个数字 i-1 并不在 numSet 中,表示 i 为这个连续序列的起始点
    • num 表示当前数字,那么将数字 i 赋值给 num
    • length 表示该连续序列的长度,此时只有一个数字,那么赋值 1
    • 若该数字 num 的下一个数字仍在 numSet 中,那么更新 num 和 length,直至不在
    • 更新 maxLength
class Solution(object):
    def longestConsecutive(self, nums):
        maxLength = 0
        numSet = set(nums)

        for i in numSet:
            if i - 1 not in numSet:
                num = i
                length = 1
                while num + 1 in numSet:
                    num += 1
                    length += 1
                maxLength = max(maxLength, length)

        return maxLength
参考

代码相关:https://leetcode.cn/problems/longest-consecutive-sequence/solution/zui-chang-lian-xu-xu-lie-by-leetcode-solution/

你可能感兴趣的:(LeetCode 128. 最长连续序列)