算法128. 最长连续序列
给定一个未排序的整数数组
nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为
O(n)的算法解决此问题。示例 1:
输入:nums = [100,4,200,1,3,2] 输出:4 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1] 输出:9示例 3:
输入:nums = [1,0,1,2] 输出:3
时间复杂度O(n)解法:
class Solution:def longestConsecutive(self, nums: List[int]) -> int:# 去重num_set = set(nums)max_len = 0for num in num_set:# 找到连续列表的起始数据if num-1 not in num_set:current_num = numcurrent_len = 1# 找到起点后,逐一找寻连续列表while current_num+1 in num_set:current_num += 1current_len += 1# 因为set去重后是会打乱顺序的,该句不能省max_len = max(max_len,current_len)return max_len时间复杂度O(nlogn)解法:
class Solution:def longestConsecutive(self, nums: List[int]) -> int:if len(nums)<1:return 0nums.sort()count = 1max_len = 1for x in range(1,len(nums)):if nums[x]-nums[x-1]==1:count+=1elif nums[x]==nums[x-1]:continueelse:count=1if max_len<=count:max_len=countreturn max_len