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: 先将数组排序,然后定义max和result保存当前最优和全局最优, 找中断点然后更新当前最优,最后更新全局最优,返回即可
public static int longestConsecutive(int[] num) {
if (num == null || num.length == 0)
return 0;
Arrays.sort(num);
int result = 1;
int max = 1;
for (int i = 0; i < num.length - 1; i++) {
if (num[i + 1] == num[i])
continue;
if (num[i + 1] - num[i] == 1)
result++;
else {
result = 1;
}
max = Math.max(max, result);
}
return max;
}
解法2: Code_Ganker大神提出的图算法
public int longestConsecutive(int[] num) {
if(num==null||num.length==0)
return 0;
HashSet<Integer> set = new HashSet<Integer>();
int global=1;
for(int i=0; i<num.length; i++) {
set.add(num[i]);
}
while(!set.isEmpty()) {
Iterator it = set.iterator();
int item = (Integer)it.next();
set.remove(item);
int local=1;
int i=item-1;
while(set.contains(i)) {
set.remove(i--);
local++;
}
i=item+1;
while(set.contains(i)) {
set.remove(i++);
local++;
}
global=Math.max(global, local);
}
return global;
}