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
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
python解答
思路:
1.数组去重,设置初始maxlen = 0(考虑空数组情况?不知道具体有没有这个例子)
2.对数组中每个数字进行循环,只要有元素,就设置当前数字开始的序列长度为1
3.如果nums-1不在数组,则当前数字可以作为某一序列开头,当nums+1是否在数组中,当前长度onelen加一,nums+1后继续寻找下一数字,直到结束
4.比较onelen和maxlen的长度
5.得到结果
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
maxlen = 0
# nums=list(set(nums))用这个句式会超时,不能去重后再加转list这一步
nums=set(nums)
for numbers in nums:
onelen = 1
if numbers-1 not in nums:
while numbers+1 in nums:# 当nums+1在数组中,就一直找
onelen += 1
numbers += 1
maxlen = max(onelen,maxlen)
#也可以用正则表达式
return maxlen