Leetcode刷题(第128题)——最长连续序列

x33g5p2x  于2022-03-11 转载在 其他  
字(0.5k)|赞(0)|评价(0)|浏览(265)

一、题目

给定一个未排序的整数数组 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

三、思路

本题采用的方法是Set,因为要求时间复杂度为O(n)。
然后进行遍历全部的元素。
然后在进行判断:是否当前元素是第一个元素,也就是说当前元素-1的值是不存在与set中的。如果是则才开始进行while循环,判断当前元素+1的值是否存在于set中。

四、代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function (nums) {
    let set = new Set(nums)
    let max = 0
    for (let i of set) {
        if (!set.has(i - 1)) {
            let num = 1;
            while (set.has(i + 1)) {
                num++
                i++
            }
            max = Math.max(max, num)
        }
    }
    return max
};

五、总结

相关文章