这个题目的最大的难点在于想到淘汰机制,
如果对于x来说,如果x-1也存在这个数组中,那么以x-1为开始的序列一定会比以x开始的序列要长
那么很自然的, 我们使用set进行元素的查找
对于每一个x-1不存在的x,都是一个可能的潜力股,需要接着去寻找 ++x
最后是时间复杂度的判断:
因为只有每一个连续序列的首元素才可能进入内循环,所以每一个元素最多只会进入一次内循环,时间复杂度是O(n)
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int ans=0;
unordered_set<int> num_set;
for(int i=0;i<nums.size();i++){
num_set.insert(nums[i]);
}
for(auto tmp : num_set){
if(num_set.find(tmp - 1) == num_set.end()){
//没找到 说明这可能是一个隐含的ans 需要测试一下
int tmpAns=1;
while(num_set.find(++tmp) != num_set.end()){
tmpAns++;
}
if(tmpAns > ans){
ans = tmpAns;
}
}
//找到了 跳过当前的i 因为那个减一的序列长度一定更长
}
return ans;
}
};