如果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而不是遍历原始数组,可以避免存在大量重复元素的情况下运行超时。