求最长连续序列的长度
Input: [100, 4, 200, 1, 3, 2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.
public int longestConsecutive(int[] num) {
int res = 0;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int n : num) {
//如果map中没有当前元素的话
if (!map.containsKey(n)) {
//先检查右边有当前元素的左右两边元素
int left = (map.containsKey(n - 1)) ? map.get(n - 1) : 0;
int right = (map.containsKey(n + 1)) ? map.get(n + 1) : 0;
// sum: length of the sequence n is in
//有的话就是左边的长度+右边的长度+1,把这个值存起来
int sum = left + right + 1;
map.put(n, sum);
//保持更新最大的sum和
// keep track of the max length
res = Math.max(res, sum);
// extend the length to the boundary(s)
// of the sequence
// will do nothing if n has no neighbors
//然后把这个sum值传到这个序列的最左边和最右边
map.put(n - left, sum);
map.put(n + right, sum);
}
else {
// duplicates
continue;
}
}
return res;
}