每天学习一点算法 2026/04/29
题目:最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
我们首先分析一下,如果要找到递增序列,是不是得找到开头,然后再计算有多个递增元素即可,那么我们怎么找到递增序列的开头呢?我们只需要找到一个元素 n 同时数组中没有 n - 1 这个元素,这就是表示这个 n 是可能的递增序列开头,这里我们直接使用 set 可以快速的找到递增序列开头。
typescript
function longestConsecutive(nums: number[]): number {
if (nums.length < 2) return nums.length // 数组长度为 0 和 1 时,最长序列长度就是 0 和 1
const set = new Set(nums) // 根据nums创建set
let max = 1 // 记录最长序列长度
set.forEach(value => {
// 循环找到递增序列开头
if (!set.has(value - 1)) {
let len = 1
// 计算当前序列长度
while (set.has(++value)) len++
// 记录最长序列长度
max = Math.max(max, len)
}
})
return max
};
题目来源:力扣(LeetCode)