Medium
Given an unsorted array of integers nums
, return the length of the longest consecutive elements sequence.
You must write an algorithm that runs in O(n)
time.
Example 1:
Input: nums = [100,4,200,1,3,2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]
. Therefore its length is 4.
Example 2:
Input: nums = [0,3,7,2,5,8,4,6,0,1]
Output: 9
Constraints:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
(define (longest-consecutive nums)
(define uniq (list->set nums))
(define (seq x a)
(cond
[(set-member? uniq x) (seq (add1 x) (add1 a))]
[else a]))
(let loop ([l (set->list uniq)] [m 0])
(match l
['() m]
[(cons x xs) #:when (not (set-member? uniq (sub1 x))) (loop xs (max m (seq x 0)))]
[(cons x xs) (loop xs m)])))