

LeetCode Hot 100:最长连续序列
用哈希集合讲清最长连续序列:只从连续段起点向右扩展,把未排序数组的查找控制在线性时间。
本期讲 LeetCode Hot 100「Longest Consecutive Sequence / 最长连续序列」。题目要求:给定一个未排序整数数组
nums,返回最长连续元素序列的长度,并且算法必须运行在 O(n) 时间内。核心思路是先把数组放进
Set,再只从连续段的起点向右扩展。如果 num - 1 也在集合里,说明 num 不是起点,直接跳过;只有起点才进入 while 扩展。这样每段连续序列只会被完整扫描一次。function longestConsecutive(nums) {
const set = new Set(nums);
let best = 0;
for (const num of set) {
if (set.has(num - 1)) continue;
let current = num;
let length = 1;
while (set.has(current + 1)) {
current++;
length++;
}
best = Math.max(best, length);
}
return best;
}时间复杂度是
O(n):每个数字只承担常数次集合查询。空间复杂度是 O(n):Set 需要存下去重后的数字。来源
Related content
- Sign in to comment.
