题目描述:
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
Clarification
Your algorithm should run in O(n) complexity.
Example
题目思路:
Given [100, 4, 200, 1, 3, 2]
,
The longest consecutive elements sequence is [1, 2, 3, 4]
. Return its length: 4
.
这题可以用一个set来记录num中的每个element。然后遍历这个set,比如,set的某个number为tmp。那我们可以查看tmp + 1, tmp + 2, tmp + 3, ... etc.和tmp - 1, tmp - 2, tmp - 3, etc...是不是也在set中(同时在set中删去这些数),然后算出以tmp为中心的consecutive elements有多长。对于set中的每个数都这样操作,最后找出最长的那个答案。
Mycode(AC = 29ms):
class Solution {
public:
/**
* @param nums: A list of integers
* @return an integer
*/
int longestConsecutive(vector<int> &num) {
// write you code here
unordered_set<int> helper;
// put numbers into the set
for (int i = 0; i < num.size(); i++) {
if (helper.find(num[i]) == helper.end()) {
helper.insert(num[i]);
}
}
if (num.size() <= 1) return num.size();
// check each number in the set, and check whether number++
// and number-- are in the set, then get the local_count
// for each number in the set
int count = 1, local_count = 1;
for (auto it = helper.begin(); it != helper.end(); it++) {
int tmp = *it;
local_count = 1;
while (helper.find(tmp + 1) != helper.end()) {
helper.erase(tmp + 1);
tmp++;
local_count++;
}
tmp = *it;
while (helper.find(tmp - 1) != helper.end()) {
helper.erase(tmp - 1);
tmp--;
local_count++;
}
count = max(count, local_count);
}
return count;
}
};