128. Longest Consecutive Sequence

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

Follow up: Could you implement the O(n) solution? 

 

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 <= 104
  • -109 <= nums[i] <= 109

Rust Solution

struct Solution;
use std::collections::HashSet;
use std::iter::FromIterator;

impl Solution {
    fn longest_consecutive(nums: Vec<i32>) -> i32 {
        if nums.is_empty() {
            return 0;
        }
        let hs: HashSet<i32> = HashSet::from_iter(nums);
        let mut res = 0;
        for &x in &hs {
            if hs.contains(&(x - 1)) {
                continue;
            }
            let mut i = 1;
            while hs.contains(&(x + i)) {
                i += 1;
                res = res.max(i);
            }
        }
        res
    }
}

#[test]
fn test() {
    let nums = vec![100, 4, 200, 1, 3, 2];
    let res = 4;
    assert_eq!(Solution::longest_consecutive(nums), res);
}

Having problems with this solution? Click here to submit an issue on github.