题目描述
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1:
输入: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
提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
解法1:直接for循环解
/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function(nums) {
    let number=nums.length==0?0:1;
    nums=nums.sort((a,b)=>parseInt(a)-parseInt(b));
    let tempNumber=1;
    let lastNumber=0.1;
    console.log(nums)
    nums.forEach((value,index,arr)=>{
        value=parseInt(value)
        if(lastNumber==value-1){
            tempNumber++;
             if(tempNumber>number){
                number=tempNumber;
            }
        }else if(lastNumber==value){
            //不重置
        }
        else{
            tempNumber=1;
        }
         lastNumber=value;
    })
    return number;
};
 
执行情况:

 解法2:使用IndexOf方法解题
/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function(nums) {
    let number=nums.length==0?0:1;
    nums.sort((a,b)=>parseInt(a)-parseInt(b))
    for(let i=0;i<nums.length;i++){
        if(nums[i]==undefined)continue
        let tempNum=1;
        let obj=nums[i]+1;
        let ii=nums.indexOf(obj);
        while(ii!=-1){
            delete nums[ii];
            obj++;
            ii=nums.indexOf(obj);
            tempNum++;
        }
        if(tempNum>number) number=tempNum;
    }
    return number;
};
 
执行情况 :有点超时,不过逻辑还行




















