🧩Algo 哈希
128. 最长连续序列
难度:🟡 Medium | 标签:哈希、并查集 | 状态:⬜ LeetCode 链接
思路
全部丢进 unordered_set,O(1) 查询。
遍历每个数,只从「序列起点」开始往后数——起点的判据是 x-1 不在集合里。
保证每个数最多被访问 2 次(自己 + 作为某条链的一部分),总复杂度 O(n)。
代码
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> s(nums.begin(), nums.end());
int best = 0;
for (int x : s) {
if (s.count(x - 1)) continue; // 不是起点,跳过
int cur = x, len = 1;
while (s.count(cur + 1)) { ++cur; ++len; }
best = max(best, len);
}
return best;
}
};
复杂度
- 时间 O(n),空间 O(n)
- 朴素排序版 O(n log n),本题要求 O(n),必须用哈希
易错 / 回顾
- 「只从起点出发」是 O(n) 的关键,遗漏会变 O(n²)
- 遍历用
s而不是nums可去重 - 注意 nums 可空,返回 0
Related · 哈希