思路
- 首先去重,得到一个哈希表
- 对于每一个数字,考虑其可能在某个连续序列中的位置:
- 如果它的上一项(即 num - 1)在哈希表中存在,那么可以跳过不考虑
- 如果它的上一项在哈希表中不存在,说明它是某个连续序列的第一项。向后遍历(num + 1[, + 1, ...])直到某一项不存在,则用此时这个序列的长度和当前最大的序列长度做比较,更新最大序列长度
var longestConsecutive = function (nums) {
const numSet = new Set(nums);
let max = 0;
numSet.forEach((num) => {
let tmpMax = 1,
tmpNum = num + 1;
if (!numSet.has(num - 1)) {
while (numSet.has(tmpNum++)) {
tmpMax += 1;
}
max = Math.max(tmpMax, max);
}
});
return max;
};