给定一个未排序的整数数组
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 <= 10^5-10^9 <= nums[i] <= 10^9
代码
知识点:哈希表
def longestConsecutive(nums):
n = len(nums)
# 特判
if n == 0:
return 0
s = set(nums) # 查询快
ans = 1
# 遍历哈希表
for i in s:
if i - 1 not in s:
# 找到没有后一个值的值作为起点
start = i
curlen = 1
# 往前加
while start + 1 in s:
start += 1
curlen += 1
ans = max(ans,curlen) # 加到没得加了就存一下值
return ans