- 最長連續序列
給定一個未排序的整數數組 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
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
對于數組中存在的連續序列,為了統計每個連續序列的長度,我們希望直接定位到每個連續序列的起點,從起點開始遍歷每個連續序列,從而獲得長度。
那么如何獲取到每個連續序列的起點呢,或者說什么樣的數才是一個連續序列的起點?
答案是這個數的前一個數不存在于數組中,因為我們需要能夠快速判斷當前數num的前一個數num - 1是否存在于數組中。
同時當我們定位到起點后,我們就要遍歷這個連續序列,什么時候是終點呢?
答案是當前數num的后一個數nunm + 1不存在于數組中,因此我們需要能夠快速判斷當前數num的后一個數num + 1是否存在于數組中。
為了實現上述需求,我們使用哈希表來記錄數組中的所有數,以實現對數值的快速查找。
python:
class Solution:def longestConsecutive(self, nums: List[int]) -> int:res = 0 # 記錄最長連續序列的長度num_set = set(nums) # 記錄nums中的所有數值for num in num_set:# 如果當前的數是一個連續序列的起點,統計這個連續序列的長度if (num - 1) not in num_set:seq_len = 1 # 連續序列的長度,初始為1while (num + 1) in num_set:seq_len += 1num += 1 # 不斷查找連續序列,直到num的下一個數不存在于數組中res = max(res, seq_len) # 更新最長連續序列長度return res