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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
public
class
Solution {
public
int
longestConsecutive( int [] num) {
int
length = 0 ;
if (num.length > 0 ){
length = 1 ;
Map<Integer, Integer> lens = new
HashMap<Integer, Integer>();
Map<Integer, Integer> visited = new
HashMap<Integer, Integer>();
for ( int
i = 0 ; i < num.length; ++i){
lens.put(num[i], 1 );
visited.put(num[i], 0 );
}
for ( int
i = 0 ; i < num.length; ++i){
if (visited.get(num[i]) != 0 )
continue ;
else {
visited.put(num[i], 1 );
if (lens.containsKey(num[i] - 1 )){
if (visited.get(num[i] - 1 ) == 0 ){
int
templength = lens.get(num[i] - 1 ) + lens.get(num[i]);
lens.put(num[i], templength);
lens.put(num[i] - lens.get(num[i] - 1 ), templength);
length = (length < templength)? templength: length;
visited.put(num[i] - 1 , 1 );
}
}
if (lens.containsKey(num[i] + 1 )){
int
templength = lens.get(num[i] + 1 ) + lens.get(num[i]);
lens.put(num[i] - lens.get(num[i]) + 1 , templength);
lens.put(num[i] + lens.get(num[i] + 1 ), templength);
length = (length < templength)? templength: length;
}
}
}
}
return
length;
}
} |