Skip to content

题目

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

示例 1:

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

示例 2:

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

提示:

  • 0 <= nums.length <= 104
  • 109 <= nums[i] <= 109

理解题目

找出数组中最长的连续长度

题解

利用set去重,然后去判断当前的项+1是否存在于Set集合中,有就增加长度

答案

ts
//自个
function longestConsecutive(nums: number[]): number {
    if(!nums.length) return 0
    nums.sort((a,b)=>a-b)
    nums = [...new Set([...nums])]
    const s:Set<number> = new Set()
    const ss:Set<number> = new Set()
    let len=1
    for(const [i,d] of nums.entries()){
        if(!s.has(d)){
            s.add(d)
        }
        const nextValue = d+1
        s.add(nextValue)
        if(nextValue === nums[i+1]){
            len++
        }else{
            ss.add(len)
            len= 1
        }
    }
    return Math.max(...ss)
};
//自个
function longestConsecutive(nums: number[]): number {
    if(!nums.length) return 0
    nums.sort((a,b)=>a-b)
    nums = [...new Set([...nums])]
    const s:Set<number> = new Set()
    const ss:Set<number> = new Set()
    let len=1
    for(const [i,d] of nums.entries()){
        if(!s.has(d)){
            s.add(d)
        }
        const nextValue = d+1
        s.add(nextValue)
        if(nextValue === nums[i+1]){
            len++
        }else{
            ss.add(len)
            len= 1
        }
    }
    return Math.max(...ss)
};
ts
//官方
function longestConsecutive(nums: number[]): number {
    let new_set:Set<number> = new Set()
    for(let num of nums){
        new_set.add(num)
    }
    let len = 0
    for(let num of new_set){
        if(!new_set.has(num-1)){
            let currentNum = num
            let currentStreak= 1

            while (new_set.has(currentNum+1)) {
                currentNum+=1
                currentStreak+=1
            }

            len = Math.max(len,currentStreak)
        }
    }

    return len
};
//官方
function longestConsecutive(nums: number[]): number {
    let new_set:Set<number> = new Set()
    for(let num of nums){
        new_set.add(num)
    }
    let len = 0
    for(let num of new_set){
        if(!new_set.has(num-1)){
            let currentNum = num
            let currentStreak= 1

            while (new_set.has(currentNum+1)) {
                currentNum+=1
                currentStreak+=1
            }

            len = Math.max(len,currentStreak)
        }
    }

    return len
};