最长连续序列(128)
题目
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
思路
我的想法是,建立一个字典m,key是数字,value是对应的该数字连续的长度,更新的方法是对于遍历的每一个数k,如果k-1或者k+1已经存在在字典里,那就将m[k]设定为m[k+1]+m[k-1]+1,即将前后两传序列连接了,同时将这一整条序列的两端的数字在字典的值也更新(不用更新序列中间的数,因为不会再被使用)。
顺便看了答案最快的,感觉这个最快的方法并不是O(n)的只不过是由于数据集大部分的情况而导致速度比较快。
代码
我的方法:
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
m = {}
ans = 0
for i in set(nums):
n = 1
left = 0
right = 0
if i-1 in m:
n+=m[i-1]
left = m[i-1]
if i+1 in m :
n+=m[i+1]
right = m[i+1]
m[i]=n
m[i-left]=n
m[i+right] = n
if m[i]>ans:
ans = m[i]
# print(m)
return ans
答案最快的:
class Solution:
def longestConsecutive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums=set(nums)
ma=0
for x in nums:
if x-1 not in nums:
y=x+1
while y in nums:
y+=1
ma=max(ma,y-x)
return ma
···