参考链接
题目描述
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2]
,
The longest consecutive elements sequence is [1, 2, 3, 4]
. Return its length: 4
.
Your algorithm should run in O(n) complexity.
题目分析
总结
代码示例
class Solution {
public:
int longestConsecutive(vector<int> &num) {
set<int> num_set;
for (int i = 0; i < num.size(); i++) {
num_set.insert(num[i]);
}
int max_len = 0;
for (int i = 0; i < num.size(); i++) {
if (num_set.find(num[i]) == num_set.end())
continue;
int tmp_len = 1, tmp = num[i];
num_set.erase(num[i]);
while (num_set.find(--tmp) != num_set.end()) {
tmp_len++;
num_set.erase(tmp);
}
tmp = num[i];
while (num_set.find(++tmp) != num_set.end()) {
tmp_len++;
num_set.erase(tmp);
}
max_len = max(max_len, tmp_len);
}
return max_len;
}
};
class Solution {
public:
int longestConsecutive(vector<int> &num) {
map<int,int> mp;
int maxlen = 0;
for(int i = 0;i<num.size();i++)
mp[num[i]] = 1;
for(int i = 0;i<num.size();i++)mp 下标是什么要搞明白
{
if(!mp[num[i]]) continue;
int tmplen = 1;
int tmp = num[i]-1;
while(mp[tmp])
{
mp.erase(tmp--);
tmplen++;
}
tmp = num[i]+1;
while(mp[tmp])
{
mp.erase(tmp++);
tmplen++;
}
if(tmplen > maxlen) maxlen = tmplen;
}
return maxlen;
}
};
class Solution {
public:
int longestConsecutive(vector<int> &num) {
map<int,int> mp;
int maxlen = 0;
for(int i = 0;i<num.size();i++)
mp[num[i]] = 1;
for(int i = 0;i<num.size();i++)mp 下标是什么要搞明白
{
if(!mp[num[i]]) continue;
int tmplen = 1;
int tmp = num[i]-1;
while(mp[tmp])
{
mp.erase(tmp--);
tmplen++;
}
tmp = num[i]+1;
while(mp[tmp])
{
mp.erase(tmp++);
tmplen++;
}
if(tmplen > maxlen) maxlen = tmplen;
}
return maxlen;
}
};
推荐学习C++的资料
C++标准函数库
在线C++API查询