【题目】给定无序数组arr,返回其中最长的连续序列的长度。
public class LongestConsecutive {
public static int longestCon(int[] arr) {
if (arr == null || arr.length == 0) {
return 0;
}
HashMap<Integer, Integer> map = new HashMap<>();
int max = 1;
for (int i = 0; i < arr.length; i++) {
if (!map.containsKey(arr[i])) {
map.put(arr[i], 1);
if (map.containsKey(arr[i - 1])) {
max = Math.max(max, merge(map, arr[i] - 1, arr[i]));
}
if (map.containsKey(arr[i] + 1)) {
max = Math.max(max, merge(map, arr[i], arr[i] + 1));
}
}
}
return max;
}
public static int merge(HashMap<Integer, Integer> map, int less, int more) {
int left = less - map.get(less) + 1;
int right = more + map.get(more) - 1;
int len = right - left + 1;
map.put(left, len);
map.put(right, len);
return len;
}
}