https://www.lintcode.com/problem/longest-consecutive-sequence/description
描述
中文English
给定一个未排序的整数数组,找出最长连续序列的长度。
您在真实的面试中是否遇到过这个题? 是
题目纠错
说明
要求你的算法复杂度为O(n)
样例
样例 1
输入 : [100, 4, 200, 1, 3, 2]
输出 : 4
解释 : 这个最长的连续序列是 [1, 2, 3, 4]. 返回所求长度 4
最近做的第二个unodered_set了
之前考虑的类似桶排序的做法 MLE了
那就unordered_set先去重
逐个找nums中是否存在在set中(为啥有这个判断,因为有可能在别的操作中删除了。。
发现了这个 然后往两边扩充
遇到了及时删除
在每个数字出现次数一次的时候 时间会少很多
也就是:当前这个删除了 两边扩的范围内 每次删除一个
就能找到最大区间了
class Solution {
public:
/**
* @param num: A list of integers
* @return: An integer
*/
int longestConsecutive(vector<int> &num) {
// write your code here
unordered_set<int>s(num.begin(), num.end());
int ans = 0;
for (int i = 0; i < num.size(); i ++) {
if (s.find(num[i]) != s.end()) {
int pre = num[i] - 1;
while(s.find(pre) != s.end()) {
s.erase(pre);
pre --;
}
int nxt = num[i] + 1;
while(s.find(nxt) != s.end()) {
s.erase(nxt);
nxt ++;
}
ans = max(ans, nxt - pre - 1);
while(s.find(num[i]) != s.end()) s.erase(num[i]);
}
}
return ans;
}
};