描述
给定一个未排序的整数数组,找出最长连续序列的长度。
说明
要求你的算法复杂度为O(n)
样例
给定一个未排序的整数数组,找出最长连续序列的长度。
说明
要求你的算法复杂度为O(n)
样例
给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4],返回所求长度 4
分析
这些样例里面肯定有一些重复的数组(未排序),所以我们需要对其先排序,然后把重复的数字剔除掉,然后再去判断最长那个连续+1的长度。
程序
class Solution {
public:
/**
* @param num: A list of integers
* @return: An integer
*/
int longestConsecutive(vector<int> &num) {
// write your code here
if (num.empty())//空数组的情况
return 0;
if (num.size() == 1)//长度为1的情况
return 1;
sort(num.begin(), num.end());//排序
num.erase(unique(num.begin(), num.end()), num.end());//去掉重复的数字
int counts, result;
result = counts = 1;
for (int i = 1; i < num.size(); i++){
while (i < num.size() && num[i] == num[i - 1] + 1){//计算连续的数组
counts++;
i++;
}
result = result <= counts ? counts : result;//最大的连续次数存入结果
counts = 1;
}
return result;
}
};