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.
利用hash表找临近元素,找到一个删一个,避免重复查找。
Source
public class Solution {
public int longestConsecutive(int[] num) {
if(num.length == 0) return 0;
HashSet<Integer> hs = new HashSet<Integer>();
for(int i = 0; i < num.length; i++){
hs.add(num[i]);
}
int max = 0;
for(int i = 0; i < num.length; i++){
if(hs.contains(num[i])){
int cnt = 1;
hs.remove(num[i]);
int l = num[i] - 1;
while(hs.contains(l)){
hs.remove(l);
l --;
cnt ++;
}
int h = num[i] + 1;
while(hs.contains(h)){
hs.remove(h);
h ++;
cnt ++;
}
max = Math.max(max, cnt);
}
}
return max;
}
}
Test
public static void main(String[] args){
int[] num = {100, 4, 200, 1, 3, 2};
System.out.println(new Solution().longestConsecutive(num));
}