class Solution {
public:
/**
*
* @param num int整型vector
* @return int整型
*/
int longestConsecutive(vector<int>& num) {
// write code here
if(num.size()<=1) return num.size();//长度<=1直接返回当前长度
int max=num[0];
int min=num[0];
int i;
int r=1;
int temp=0;
for(i=1;i<num.size();i++){//遍历找出最大最小值
if(num[i]<min) min=num[i];
else if(num[i]>max) max=num[i];
}
bool d[max-min+1];//d数组长度为max-min+1,即按照num的取值范围给d分配空间
//d[0]代表min在num中是否存在,d[1]代表min+1在num中是否存在……d[i]代表min+i在num中是否存在
//d[0]代表num中最小值min的存在性,必然为1;
//d[max-min+1]代表num中最大值max的存在性,也必然为1;
memset(d,0,max-min+1);//初始化d为0
for(i=0;i<num.size();i++){//遍历num给数组d赋值
d[num[i]-min]=1;
}
for(i=0;i<max-min+1;i++){//检测数组d中最多有多少个连续的true即可
if(d[i]==1) temp++;
else{
r=temp>r?temp:r;
temp=0;
}
}
r=temp>r?temp:r;
return r;
}
};