📅  最后修改于: 2023-12-03 14:58:36.332000             🧑  作者: Mango
在一个无序的整数数组中,找出 最长 连续序列的长度。
例如: 给定数组 [100, 4, 200, 1, 3, 2], 最长的连续序列是 [1, 2, 3, 4]。其长度为 4。
要求算法的时间复杂度为 O(n)。
该问题要求我们在一个无序的整数数组中,找出最长的连续序列的长度,且时间复杂度为 O(n)。
我们可以采用哈希表的方式来进行解决,首先将数组中的元素全部存入哈希表中。然后开始循环数组中的元素,对于每一个元素,在哈希表中查找其相邻的元素是否存在,如果存在,则将长度加一,并将其从哈希表中删除,然后继续查找下一个相邻元素。
这样的做法可以保证时间复杂度为 O(n),因为遍历整个数组需要 O(n) 的时间,对于每一个元素,最多只会被访问一次,哈希表的查找和删除的时间复杂度都为 O(1)。
以下是该算法的代码实现:
def longestConsecutive(nums):
if not nums:
return 0
num_set = set(nums)
longest = 1
for num in num_set:
if num - 1 not in num_set:
cur_num = num
cur_len = 1
while cur_num + 1 in num_set:
cur_num += 1
cur_len += 1
longest = max(longest, cur_len)
return longest
其中,参数 nums
是一个无序的整数数组,返回值为最长的连续序列的长度。
本题要求我们在一个无序的整数数组中,找出最长的连续序列的长度,且时间复杂度为 O(n)。我们采用哈希表的方式进行解决,遍历数组中的元素,在哈希表中查找其相邻的元素是否存在,如果存在,则将长度加一,并将其从哈希表中删除,然后继续查找下一个相邻元素。这样的做法可以保证时间复杂度为 O(n)。