您的位置:首页 > 产品设计 > UI/UE

Leetcode 128. Longest Consecutive Sequence

2016-06-29 11:42 603 查看
复杂度要求为线性。

这个题的解题思路是:第一步:将数组进行排序;第二步:遍历数组,并用一个数组length【i】(初始值为1)记录连续序列的长度:

如果num【i】==num【i-1】+1,length【i】=length【i-1】+1;

如果num【i】!=num【i-1】,length【i】的值不变。

求出最大的length【i】。

由于第二步的的复杂度为线性的,关键是第一步。

线性的排序方法,貌似只有桶排序,在这里我用了map,然后过了。

class Solution {

public:
int longestConsecutive(vector<int> &num) {
map<int, int>m;
int i = 0;
for (vector<int>::iterator it = num.begin(); it != num.end(); it++,i++)
{
m.insert(map<int, int>::value_type(*it, i));
}
int *f = new int[num.size()];
for (int i = 0; i < num.size(); i++)
{
f[i] = 0;
}
f[0] = 1;
map<int, int>::iterator it = m.begin();
map<int, int>::iterator it1 = m.begin();
it1++;
i = 1;
int max = 1;
for (; it1 != m.end(); it++, i++,it1++)
{
if (it->first + 1 == it1->first)
{
f[i] = f[i - 1] + 1;
}
else
{
f[i] = 1;
}
if (f[i] > max)
max = f[i];
}
return max;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: