题目
给定一个未排序的整数数组 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