128. Longest Consecutive Sequence
如果n-1存在于数组中,则以n开头的连续序列可以忽略掉,因为以n-1开头的连续序列的长度肯定至少比以n开头的连续序列长1个元素。这是本题的关键。然后利用哈希表查询元素是否在数组中。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int max_len = 0;
std::unordered_set<int> hash_table;
for(auto ie:nums) hash_table.emplace(ie);
for(auto ie:hash_table){
int current_len = 0;
if(hash_table.find(ie-1) == hash_table.end()){
int current_len = 1;
while(hash_table.find(ie+1) != hash_table.end()){
current_len++;
ie++;
}
max_len = std::max(max_len,current_len);
}
}
return max_len;
}
};
第7行遍历hash_table而不是遍历原始数组,可以避免存在大量重复元素的情况下运行超时。