Typescript-Algorithms
    Preparing search index...

    Variable longest_consecutive_sequenceConst

    longest_consecutive_sequence: (nums: number[]) => number = longestConsecutive

    128.最长连续序列

    给定一个未排序的整数数组 nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

    请你设计并实现时间复杂度为 O(n) 的算法解决此问题。


    输入: nums = [100,4,200,1,3,2]
    输出: 4
    解释: 最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。


    输入: nums = [0,3,7,2,5,8,4,6,0,1]
    输出: 9


    输入: nums = [1,0,1,2]
    输出: 3


    • 0 <= nums.length <= 10^5
    • -10^9 <= nums[i] <= 10^9

    Type declaration

      • (nums: number[]): number
      • Parameters

        • nums: number[]

        Returns number

    1. 遍历数组,将数组中的元素加入到set中。
    2. 遍历set,如果set中存在num-1,则跳过,否则说明当前num是开头,我们不断尝试寻找+1的数,直到找不到为止。
    3. 当找不到+1的数时,更新最大值,拿当前序列的长度,和max比较,取最大值。
    function longestConsecutive(nums: number[]): number {
    const set = new Set<number>(nums);
    let max = 0;

    for (let num of set) {
    // 如果num-1在set中存在,说明当前这个num不是开头,我们只从开头开始计算
    if (set.has(num - 1)) {
    continue;
    }

    // 否则说明当前num是开头,我们不断尝试寻找+1的数,直到找不到为止
    let cur = num + 1;
    while (set.has(cur)) {
    cur++;
    }

    // 当找不到+1的数时,更新最大值,拿当前序列的长度,和max比较,取最大值
    max = Math.max(max, cur - num);
    }

    return max;
    };