A hashset to save all unique numbers in the array.
left indicates the number that is 1 less than target, right indicate the number that is 1 greater than target, here, target is nums[i]
keep decreasing (increasing) left (right) when left (right) exists in the set, at the same time, remove left (right) from the set.
record that largest length.
public class Solution {
public int longestConsecutive(int[] nums) {
HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
int len = 0;
for (int i=0; i<nums.length; i++) {
int left = nums[i]-1;
while (set.contains(left)) {
set.remove(left);
left--;
}
int right = nums[i]+1;
while (set.contains(right)) {
set.remove(right);
right++;
}
len = Math.max(len, right-left-1);
}
return len;
}
}