題目
給定一個未排序的整數數組 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即可。