128. 最长连续序列(中等)
给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n)
的算法解决此问题。
1.先排序去重后,查连续序列
var longestConsecutive = function(nums) {
//长度小于等于1等于本身即可
if(nums.length<=1) return nums.length
let res=0
nums.sort((a,b)=>a-b)
nums=Array.from(new Set(nums))
let len=1
for(let i=0;i<nums.length-1;i++){
if(nums[i+1]-nums[i]==1){
len++
}else{
res=Math.max(res,len)
len=1
}
}
res=Math.max(res,len)
return res
};
2.利用哈希表
var longestConsecutive = function(nums) {
let set= new Set()
let res=0
let len=0
for(let s of nums){
set.add(s)
}
for(let s of nums){
if(!set.has(s-1)){
let curNum=s
len=1
while(set.has(curNum+1)){
len++
curNum++
}
res=Math.max(res,len)
}
}
return res
};