Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2]
,
The longest consecutive elements sequence is [1, 2, 3, 4]
. Return its length: 4
.
Your algorithm should run in O(n) complexity.
Difficulty: Hard
Solution 1: sort first and then traverse(logn)
public class Solution {
public int longestConsecutive(int[] nums) {
int ans = 1;
int len = nums.length;
if(len == 0)
return 0;
if(len == 1)
return 1;
Arrays.sort(nums);
int pre = nums[0], count = 1;
for(int i = 1; i < len; i++){
if(nums[i] - pre == 1){
count++;
ans = Math.max(ans, count);
pre = nums[i];
}
else if(nums[i] - pre > 1){
count = 1;
pre = nums[i];
}
}
return ans;
}
}
Solution 2: Use HashSet (n):
public class Solution {
public int longestConsecutive(int[] nums) {
int len = nums.length;
if(len == 0)
return 0;
if(len == 1)
return 1;
Set<Integer> set = new HashSet<Integer>();
for(int i : nums){
set.add(i);
}
int ans = 1;
for(int i : nums){
int count = 1, left = i - 1, right = i + 1;
while(set.contains(left)){
set.remove(left);
left--;
count++;
}
while(set.contains(right)){
set.remove(right);
right++;
count++;
}
ans = Math.max(ans, count);
}
return ans;
}
}