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.
这题思路和word ladder有异曲同工之妙, 都是抽象成图来用DFS, 每个数字就是顶点, 相邻数字之间有一条边, Code Ganker Rocks!
public class Solution {
public int longestConsecutive(int[] nums) {
if(nums == null || nums.length == 0)
return 0;
int res = Integer.MIN_VALUE;
Set<Integer> set = new HashSet<Integer>();
for(int i : nums){
set.add(i);
}
while(!set.isEmpty()){
Iterator iter = set.iterator();
int item = (Integer)iter.next();
set.remove(item);
int len = 1;
int i = item - 1;
while(set.contains(i)){
len++;
set.remove(i--);
}
i = item + 1;
while(set.contains(i)){
len++;
set.remove(i++);
}
res = Math.max(len, res);
}
return res;
}
}