给定一个未排序的整数数组,找出最长连续序列的长度。
样例
说明 要求你的算法复杂度为O(n)
给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4],返回所求长度 4
class Solution {
public:
/**
* @param nums: A list of integers
* @return an integer
*/
int longestConsecutive(vector<int> &num) {
// write you code here
int n = num.size();
int result = 0;
set<int> buf;
for (int i = 0; i < n; i++)
{
buf.insert(num[i]);
}
for (int i = 0; i < n; i++)
{
int left = maxLen(0, num[i], buf);
int right = maxLen(1, num[i]+1, buf);
if (left+right > result)
{
result = left + right;
}
}
return result;
}
private:
int maxLen(int flag, int val, set<int> &buf)
{
int result = 0;
while (buf.find(val) != buf.end())
{
result++;
buf.erase(val);
if (flag == 0)
{
val--;
}
else
{
val++;
}
}
return result;
}
};