题目
给定一个未排序的整数数组 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
答案
这个问题可以使用哈希表(字典)来解决,时间复杂度为O(n)。
具体思路如下:
遍历整个数组,对于每个数字,将其作为键,出现的位置作为值存入字典。
对于每个数字,在字典中查找它之前的最大数字及其出现的位置。
计算当前数字与之前最大数字之间的距离,并更新最大距离。
返回最大距离加1即为最长数字连续序列的长度。
下面是Python代码实现:
def longestConsecutive(nums): if not nums: return 0 num_dict = {} for i, num in enumerate(nums): if num in num_dict: num_dict[num] = i else: num_dict[num] = i - num max_distance = 0 longest_length = 0 for num in num_dict: if num - num_dict[num] > max_distance: max_distance = num - num_dict[num] longest_length = max_distance + 1 return longest_length
在这个算法中,我们使用字典存储每个数字出现的位置,并计算当前数字与之前最大数字之间的距离。最后返回最长距离加1即可。