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