给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n)
的算法解决此问题。
最直观的想法就是遍历整个数组,找到第一个数据后接着找到他的下一个数据,一直找到没有下一个为止。
class Solution(object):
def longestConsecutive(self, nums):
longest_length=0
length=len(nums)
num_set=set(nums)
for num in num_set:
current_num=num
current_length=1
for i in range(length):
if current_num+1 in num_set:
current_num=current_num+1
current_length=current_length+1
else:
break
longest_length=max(longest_length,current_length)
return longest_length
但是运行时间不尽人意。故需要进行一定的优化。
我们可以先判断这个数n的前一个数(n-1)是不是在数组中,如果在则跳过该数据,如果不在,就代表他是一整个序列的最开始的部分,对他进行遍历查找序列。
class Solution(object):
def longestConsecutive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
longest_length=0
num_set = set(nums)
for num in num_set:
if num-1 not in num_set:
current_num=num
current_length=1
while current_num+1 in num_set:
current_length=current_length+1
current_num=current_num+1
longest_length=max(longest_length,current_length)
return longest_length