this page ⟩ lc notescollectionshome

Longest Consecutive Sequence [LC#128]

Given an unsorted array of integers nums, return the length of the longest consecutive elements sequence.

Brute Force

  • Consider each element as seed.
  • Check if next element in the sequece is in the list. keep track of sequence length
  • $T(n) = O(n^3)$; $S(n) = O(1)$

Sorting

  • Sort the array.
  • Check the length of longest conseqtive sequence
  • $T(n) = O(n \log n)$; $S(n) = O(n)$

Hash Table based look up

  • For each num, if num-1 is not in the list, then its possibly a sequence’s begning
  • For each sequence begning, check if conseqtive elements are in the list
  • Each valid sequence is tested once
  • $T(n) = O(n)$
  • $S(n) = O(n)$
def longest_consecutive_sequence(nums: List[int]) -> int:
    entries = set(nums)
    best = 0
    for num in nums:
        if num-1 not in entries:
            next_num, seq_len = num+1, 1
            while next_num in entries: 
                next_num += 1
                seq_len += 1
            best = max(best, seq_len)
    return best