用hash表去存储,初始val为0,然后设置一次遍历hash表,如果遍历过为1。当val没有遍历过,开始循环,设置左右指针,查询左右指针是否存在,存在的话,计数+1。直到不存在,比较count和result,保存最大值。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_map<int,int> hashmap;
for(int i=0;i<nums.size();i++)
if(!hashmap.count(nums[i]))
hashmap[nums[i]]=0;
int pmove,lmove,rmove,count,result=0;
for(unordered_map<int,int>::iterator it=hashmap.begin();it!=hashmap.end();it++)
{
pmove=(*it).first;
if(hashmap[pmove])
continue;
else
{
count=1;
lmove=pmove-1;rmove=pmove+1;
while(hashmap.count(lmove))
count++;hashmap[lmove--]=1;
while(hashmap.count(rmove))
count++;hashmap[rmove++]=1;
}
result=result>count?result:count;
}
return result;
}
};
也可以使用set,但是set插入的时候回自动排序,所以跟先排序一样了。先排序的话,就只有右侧增长,不存在左指针了。