128. Longest Consecutive Sequence
Question: Longest Consecutive Sequence
Solution
要找連續的數字,第一個是想到用 hash map [0, 0, 0, 0......, 0, 0, 0]
但如題目所述,如果數字範圍很大的話,這個 hash map 就會很長,會需要很多記憶體空間做儲存,因此不可行
分析題目:
nums = [100,4,200,1,3,2]
用看的可以很快分成 3 個連續數字串
[1, 2, 3, 4] [100] [200]
可以發現三個數字串都有一個開頭,所以首先我們要找出數字串的開頭,再去一個一個找它後面還有沒有人。
-
找 start number:找的方式是 “check no left”,確定 number list 中沒有它前一個數字!
要找東西有沒有存在,用 set: 先把 numbers 存成 set data structure
-
是 start number:往後找他下一個數字,還有,就繼續
1 → 2 → 3 →4 → 沒了!
長度 4
把長度記起來,如果有比它更長的,就替換掉
-
不是 start number:跳過
class Solution:
def longestConsecutive(self, nums: List[int]) -> int:
max_length = 0
nums = set(nums)
for num in nums:
if num - 1 not in nums:
length = 0
while num + length in nums:
length += 1
max_length = max(max_length, length)
return max_length
Time Complexity: O(n)
Space Complexity: O(n)


Comments
Post a Comment