题意:给一个数组,求这个数组中连续数字部分的最大长度是多少
分析:先排序后再用哈希表来做就行,以前都是用的数组(桶排序那种想法来做),但这道题有负数,所以不得不(巧了)用到了map这种实用的stl模板,做法就是,找一个数,从这个数起前后寻找看看map中是否有临近元素(也就是能使长度加1的元素),如果断了,就找下一个数重复操作,为了避免超时所有被找过的元素都被标记(因为我们要寻找的数字都是连续的也就是一整串的)
AC:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
map<int,bool> hash;
map<int,bool> used;
int leng=0;
int maxn=1;
if(!nums.size())
return 0;
for(int i=0;i<nums.size();i++)
{
hash[nums[i]]=true;
used[nums[i]]=false;
}
for(int i=0;i<nums.size();i++)
{
if(used[nums[i]])
continue;
leng=1;
for(int j=nums[i]+1;hash.find(j)!=hash.end();j++)
{
if(hash[j])
{
leng++;
used[j]=true;
}
}
for(int j=nums[i]-1;hash.find(j)!=hash.end();j--)
{
if(hash[j])
{
leng++;
used[j]=true;
}
}
if(leng>maxn)
maxn=leng;
}
return maxn;
}
};