https://leetcode.cn/problems/longest-consecutive-sequence/description/?envType=study-plan-v2&envId=top-100-liked
前置知识
使用集合来实现存储。
unordered_set<int> s;
for (int i = 0; i < nums.size(); i ++){s.insert(nums[i]);
}
判断是否在集合中存在
s.count(x) // x在s中则返回1,否则返回0
从集合中删除元素
s.erase(x);
思路
将各个数字存储到哈希表中,如果x
在哈希表中且x-1
不在哈希表中,说明x
是一段连续区间的开始,用y - x + 1
记录该区间的长度
for (auto x : nums){if (s.count(x) && !s.count(x - 1)){s.erase(x); // 防止重复遍历int y = x;while(s.count(y + 1)){y ++;s.erase(y); // 防止重复遍历}res = max(res, y - x + 1);}
}
代码
class Solution {
public:int longestConsecutive(vector<int>& nums) {unordered_set<int> s;for (int i = 0; i < nums.size(); i ++){s.insert(nums[i]);}int res = 0;for (auto x : nums){if (s.count(x) && !s.count(x - 1)){s.erase(x);int y = x;while(s.count(y + 1)){y ++;s.erase(y);}res = max(res, y - x + 1);}}return res;}
};