一、问题
''' 给定一个未排序的整数数组 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 '''
二、思路
定义函数:首先定义了一个名为 longestConsecutive 的函数,它接受一个整数数组 nums 作为输入参数。初始化集合:使用 Python 的集合类型(set)创建一个名为 elements 的集合,并将输入数组 nums 中的所有元素添加到这个集合中。这样做的目的是为了能够在 O(1) 的时间内检查一个数字是否在数组中。初始化变量:定义一个名为 longest_streak 的变量,用于保存找到的最长连续序列的长度。初始值设为0。遍历数组:使用一个 for 循环遍历输入数组 nums 中的每个数字 num。检查起始点:对于每个数字 num,首先检查它前面的数字 num - 1 是否在集合 elements 中。如果不在,那么 num 可能是某个连续序列的起始点。寻找连续序列:如果 num 是起始点,则从这个数字开始,向后查找连续的数字。使用一个 while 循环,每次检查当前数字 current_num 加 1 是否在集合 elements 中。如果在,说明这个数字也是连续序列的一部分,于是将 current_num 加 1,并将当前序列的长度 current_streak 加 1。这个过程一直持续到不能再找到连续的数字为止。更新最长序列长度:在每次查找后,比较当前序列的长度 current_streak 与已知的最长序列长度 longest_streak。如果 current_streak 更长,则更新 longest_streak 的值。返回结果:遍历完所有数字后,返回 longest_streak,即为找到的最长的数字连续序列的长度。
三、解法
写法1
#自己写的class Solution:def longestConsecutive(self,nums:list[int]):elements = set(nums)longest_streak = 0for num in nums:x = num - 1if x not in nums:y = num + 1current_streak =0while y in nums:current_streak += 1 #缺少了一个y+=1if longest_streak < current_streak:longest_streak = current_streakreturn longest_streak
写法2
class Solution:def longestConsecutive(self, nums: list[int]):elements = set(nums)longest_streak = 0for num in nums:x = num - 1if x not in elements:y = num + 1current_streak = 1while y in elements:current_streak += 1y += 1if longest_streak < current_streak:longest_streak = current_streakreturn longest_streak
四、学习汇总:
set(),是集合类型。set(nums)是把nums列表转化为集合类型是数据