LeetCode题解: Longest Consecutive Sequence

Longest Consecutive Sequence

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

思路:

题目的困难之处在于,要求O(n)的时间复杂度。这样对每个数字的查询,插入,删除都必须是O(1)的水平。满足这个条件的就是unordered_set这种基于hash的容器了。首先选择一个数字,然后向左向右拓展成一个区间,直到区间左右的数字都不在给定的数组内。最后测量区间的长度,找到最长的区间。

题解:

class Solution {
public:
    int longestConsecutive(vector<int> &num) {
        unordered_set<int> hash_num;
        for(auto& n : num)
            hash_num.insert(n);
            
        int max_len = 0;
        while(!hash_num.empty())
        {
            int num = *begin(hash_num);
            hash_num.erase(begin(hash_num));
            
            int left = num;
            int right = num;
            
            auto liter = hash_num.find(left - 1);
            while(liter != hash_num.end())
            {
                hash_num.erase(liter);
                left -= 1;
                liter = hash_num.find(left - 1);
            }            
            
            auto riter = hash_num.find(right + 1);
            while(riter != hash_num.end())
            {
                hash_num.erase(riter);
                right += 1;
                riter = hash_num.find(right + 1);
            }
            
            max_len = max(max_len, right - left + 1);
        }
        
        return max_len;
    }
};



你可能感兴趣的:(LeetCode)