Longest Consecutive Sequence
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.
用两个哈希表,一个哈希表储存原题目中的数,然后依次遍历这些数,另一个哈希表储存已经遍历过得数防止重复计算,然后以这个数为基准左右扫描,求连续序列长度。负责度为O(N)。
public int longestConsecutive(int[] num) {
if(num.length==0){
return 0;
}
int minvalue = Integer.MAX_VALUE;
int maxvalue = Integer.MIN_VALUE;
//储存原题目中的数
HashMap<Integer, Integer>numHashMap = new HashMap<Integer, Integer>();
//储存已经访问过得数
HashMap<Integer, Integer>visitedHashMap = new HashMap<Integer, Integer>();
for (int i = 0; i < num.length; i++) {
if(minvalue>num[i]){
minvalue = num[i];
}
if(maxvalue<num[i]){
maxvalue = num[i];
}
numHashMap.put(num[i], num[i]);
}
int maxlength = 1;
int length = 1;
for(int i =0; i<num.length; i++){
//以num[i]为基准,求连续序列长度
if(visitedHashMap.get(num[i])==null){
visitedHashMap.put(num[i], num[i]);
length = 1;
int j=1;
while(numHashMap.get(num[i]-j)!=null){
length++;
visitedHashMap.put(num[i]-j, num[i]-j);
j++;
}
j=1;
while(numHashMap.get(num[i]+j)!=null){
length++;
visitedHashMap.put(num[i]+j, num[i]+j);
j++;
}
if(maxlength<length){
maxlength = length;
}
}
}
return maxlength;
}