题目描述
给定一个未排序的整数数组 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;
};
执行情况 :有点超时,不过逻辑还行