Longest Consecutive Sequence

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

Solution

Approach 1:

Java
class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums.length < 2) return nums.length;
        Arrays.sort(nums);
        int maxLen = 0;
        int longSeq = 1;
        for(int i = 1 ; i < nums.length; i++ ) {
            if(nums[i] == nums[i-1] + 1) longSeq++;
            else if(nums[i] == nums[i-1]) continue;
            else {
                maxLen = maxLen < longSeq ? longSeq : maxLen;
                longSeq = 1;
            }
        }
        maxLen = maxLen < longSeq ? longSeq : maxLen;
        return maxLen;
    }
}
Agnibha Chandra

Approach 2:

Java
class Solution {

    public int longestConsecutive(int[] nums) {
        if (nums.length == 0) return 0;
        HashSet<Integer> set = new HashSet<>();
        int ans = 1;
        for (int num : nums) set.add(num);
        for (int num : nums) {
            if (!set.contains(num - 1)) {
                int count = 1;
                while (set.contains(num + 1)) {
                    num++;
                    count++;
                }
                ans = Math.max(count, ans);
            }
        }
        return ans;
    }
}
Agnibha Chandra