首页 > 代码库 > [LeetCode] Longest Consecutive Sequence

[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;    }};

[LeetCode] Longest Consecutive Sequence