python每日一题——3最长连续序列

题目

给定一个未排序的整数数组 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即可。

你可能感兴趣的:(算法练习,python,算法,leetcode)