用unordered_map保存每个元素及其出现的位置。
遍历num,遇到未检查过的元素,则依次检查比其大和比其小的元素是否存在,并把检测过的元素都标记为已检测。若新找到的连续整数长度大于已经发现的最大长度,则更新。
-
class Solution {
-
public:
-
int longestConsecutive(vector<int> &num) {
-
// IMPORTANT: Please reset any member data you declared, as
-
// the same Solution instance will be reused for each test case.
-
int re=0;
-
-
unordered_map<int,int> exist;
-
for(int i=0;i<num.size();i++)
-
{
-
exist.insert(pair<int,int>(num[i],i));
-
}
-
vector<bool> visited(num.size(),false);
-
for(int i=0;i<num.size();i++)
-
{
-
if(false==visited[i])
-
{
-
visited[i]=true;
-
int j;
-
int k;
-
for(j=num[i]+1;exist.count(j);j++) visited[exist[j]]=true;
-
for(k=num[i]-1;exist.count(k);k--) visited[exist[k]]=true;
-
if(j-k-1>re) re=j-k-1;
-
}
-
}
-
return re;
-
}
-
};
阅读(103) | 评论(0) | 转发(0) |