题目描述
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.
- 思路
求乱序数组中最长的可连续数字(位置不一定相邻)。
用hash存下数组的所有值。然后第二次遍历,对于每个数,从后往前每次加一检查是否存在于hash表中,存在则计数加一继续;然后再从后往前同理,两数相加即为此数相关的最长可连续数。同时若找到则置其value为true(或其他数),这样总共遍历2遍。
import java.util.*;
public class Solution {
public int longestConsecutive(int[] num) {
if(num == null || num.length == 0)
return 0;
Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
for(int i=0; i<num.length; i++){
map.put(num[i], false);
}
int maxLen = 1;
for(int i=0; i<num.length; i++){
int k = num[i];
if( !map.get(k)){
int n1 = 0;
int n2 = 0;
int key = k;
while(map.get(key) != null && !map.get(key)){
map.put(key, true);
key ++;
n1 ++;
}
key = k - 1;
while(map.get(key) != null && !map.get(key)){
map.put(key, true);
key --;
n2 ++;
}
maxLen = Math.max(maxLen, n1+n2);
}
}
return maxLen;
}
}