ID:128.最长连续序列

48 阅读1分钟

题目链接

思路

  • 首先去重,得到一个哈希表
  • 对于每一个数字,考虑其可能在某个连续序列中的位置:
    • 如果它的上一项(即 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;
};