题目
给定一个未排序的整数数组 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
思路
这道题技巧性很强,可以用哈希也可以用并查集,并查集把每个数字看成一个节点,链接关系就是数值比其大1,另外额外维护一个size,保存每个num能达到的最大值
并查集
python代码:
class Solution(object):
def longestConsecutive(self, nums):
nums = set(nums)
ans = 0
#离散的并查集,使用字典
fa = {num:num for num in nums} #存储每个节点的root,初始化为自己
size = {num:1 for num in nums} #存储以当前节点为root的节点数量
def find(x):
if fa[x] != x:
fa[x] = find(fa[x])
r