Skip to content

3. Longest Consecutive Sequence

Pattern: HashMap (Set)

Problem

Given an unsorted array, return the length of the longest consecutive elements sequence. Must run in O(n).

Example:

Input:  [100, 4, 200, 1, 3, 2]
Output: 4  // [1, 2, 3, 4]

Solution

func longestConsecutive(nums []int) int {
    set := map[int]bool{}
    for _, num := range nums {
        set[num] = true
    }

    longest := 0

    for num := range set {
        if !set[num-1] {  // only start from sequence beginning
            length := 1
            for set[num+length] {
                length++
            }
            if length > longest {
                longest = length
            }
        }
    }

    return longest
}

O(n) time. The !set[num-1] check ensures we only start counting from the beginning of each sequence.