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.
用set保存num[]数组中的值,找数时从向前向后2个方向找,找到数后就从set中删除这个数,防止下次再次找到
public class Solution {
public int longestConsecutive(int[] num) {
int ret = 0;
Set<Integer> set = new HashSet<Integer>();
for(int i:num)
set.add(i);
for(int i=0;i<num.length;i++){
int ac = findNum(true,num[i],set);
int dc = findNum(false,num[i]-1,set);
if(ac+dc>ret)
ret = ac+dc;
}
return ret;
}
private int findNum(boolean flag, int pivot,Set<Integer> set) {
int count=0;
if(flag){
while(set.contains(pivot)){
set.remove(pivot);
count++;
pivot++;
}
}else {
while(set.contains(pivot)){
set.remove(pivot);
count++;
pivot--;
}
}
return count;
}
}