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
答案
思路:
- 防御性:小于等于 0 返回 0
- 先排序
- 声明最大值 max 和 count=1 计数器
- for 从 1 向前比较
- 判断是否为连续项
- 符合 count++
- 相等跳出循环 continue
- 不符合 比较当前最大值,count 重置为 1
- 判断是否为连续项
- 返回最大值
/**
* @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)