最长连续序列【困难】
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
解题思路
首先进行set处理,去掉重复的元素,然后在进行排序。定义两个变量n和maxn,分别存储本次连续长度和所有的最大连续长度。对列表进行遍历,得到当前连续长度,和最大连续长度进行比较,并根据条件替换最大连续长度的值,最后返回最大连续长度。下面是这道题的代码:
class Solution:
def longestConsecutive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if nums == []:
return 0
nums = list(set(nums))
nums.sort()
n = 1
maxn = 1
for i in range(0,len(nums)-1):
if nums[i+1] - nums[i] == 1:
n = n + 1
else:
if n > maxn:
maxn = n
n = 1
if n > maxn:
maxn = n
return maxn
另一种方法
下面这个方法没用到排序,只是去重,然后判断集合里是否含有这个数字,从而得出连续的序列的长度,最终的到最长连续序列返回。下面是代码:
class Solution:
def longestConsecutive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums = set(nums)
maxn = 0
for i in nums:
if i - 1 not in nums:
n = i +1
while n in nums:
n = n + 1
maxn = max(maxn, n - i)
return maxn