- Longest Consecutive Sequence
中文English
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
Example
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.
Clarification
Your algorithm should run in O(n) complexity.
解法1:
这题可以用unordered_map或unordered_set。每找到一个,往向大和向小两个方向找。记得找到后把元素删除,这样,每个元素最多找了一次,所以复杂度O(n)。
代码如下:
class Solution {
public:
/**
* @param num: A list of integers
* @return: An integer
*/
int longestConsecutive(vector<int> &num) {
int n = num.size();
unordered_map<int, int> um; //number vs counter?
for (int i = 0; i < n; ++i) {
if (um.find(num[i]) == um.end()) {
um[num[i]] = 1;
} else {
um[num[i]]++;
}
}
int count = 0, maxCount = 0;
for (int i = 0; i < n; ++i) {
if (um[num[i]] > 0) {
int number = num[i];
count = 0;
while(um[number] > 0) {
um.erase(number);
number++;
count++;
}
number = num[i] - 1;
while(um[number] > 0) {
um.erase(number);
number--;
count++;
}
maxCount = max(count, maxCount);
}
}
return maxCount;
}
};