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 ChandraApproach 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