[LeetCode] 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.

我的思路

这道题在 LeetCode 上通过率也就 30% 不到,还标记为 hard 了,其实题目并不难。

使用排序,当然可以解决这个问题,但是时间复杂度为 O(nlgn) ,显然不符合我们的题意。这道题我们需要考虑使用 hashmap ,以下是我 AC 后的代码,注意 LeetCode 支持c++11。

/**
 * Zhou J
 */

class Solution 
{
public:
    int longestConsecutive(vector<int> &num) 
    {
        unordered_map<int, int> hs;
        for (const auto &ival : num)
        {
            hs.insert(make_pair(ival, 0));
        }
        
        int maxl = 1;
        
        for (const auto &ival : num)
        {
            if (hs.find(ival)->second == 1)
            {
                continue;
            }
            
            // initialize the current_max before every loop
            int current_max = 1;
            
            // record the right side
            int tmp = ival;
            while(hs.count(tmp + 1))
            {
                current_max ++;
                tmp ++;
                hs[tmp] = 1;
            }
            
            // record the left side
            tmp = ival;
            while(hs.count(tmp - 1))
            {
                current_max ++;
                tmp --;
                hs[tmp] = 1;
            }
            
            // update the returned maxl
            maxl = max(current_max, maxl);
        }
        
        return maxl;
    }
};
原文地址:https://www.cnblogs.com/jianxinzhou/p/4214153.html