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)时间内求出最长连续序列长度解法:先将元素放在set中,再遍历由当前元素分别向前后查看连续的长度,注意为防止重查找需要边查找边删除
public class Solution {
public int longestConsecutive(int[] num) {
int len = num.length;
HashSet<Integer> hs = new HashSet<Integer>();
for(int i=0; i<len; i++){
hs.add(num[i]);
}
int max = 0;
for(int i=0; i<len; i++){
int t = 1;
if(hs.contains(num[i])){
int cur = num[i] + 1;//向前查看
while(hs.contains(cur)){
hs.remove(cur);
cur++;
t++;
}
cur = num[i] - 1;//向后查看
while(hs.contains(cur)){
hs.remove(cur);
cur--;
t++;
}
max = Math.max(max, t);
}
}
return max;
}
}