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; } };