Skip to main content

128. 最长连续序列

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

答案

思路:

  1. 防御性:小于等于 0 返回 0
  2. 先排序
  3. 声明最大值 max 和 count=1 计数器
  4. for 从 1 向前比较
    • 判断是否为连续项
      • 符合 count++
      • 相等跳出循环 continue
      • 不符合 比较当前最大值,count 重置为 1
  5. 返回最大值
/**
* @param {number[]} nums
* @return {number}
*/
var longestConsecutive = function(nums) {
if(nums.length <= 0) return 0

// 排序
const numSort = nums.sort((a,b)=>a-b)
let max = 0 // 记录最大值(最长连续项)
let count = 1

for (let i = 1; i < nums.length; i++) {
if(nums[i] === nums[i-1]+1){ // 下一项为连续项:nums[i]当前 、nums[i-1]+1上一项连续项
count++
}else if(nums[i] === nums[i-1]){ // 下一项等于当前项:跳出循环
continue
}else{ // 下一项不是连续项
// 记录最大值(最长连续项),注意要与之前的对比
max = Math.max(max,count)
count = 1
}
}
// 记录最大值(最长连续项),注意要与之前的对比
return Math.max(max,count)
};
var nums = [100,4,200,1,3,2]

longestConsecutive(nums)