题目:
题解:
typedef struct
{
int key;
UT_hash_handle hh;
}Hash;
int longestConsecutive(int* nums, int numsSize) {
Hash* head=NULL;
Hash* temp=NULL;
for(int i=0;i<numsSize;i++)
{
int num=nums[i];
HASH_FIND_INT(head,&num,temp);
if(!temp)
{
temp=(Hash*)malloc(sizeof(Hash));
temp->key=nums[i];
HASH_ADD_INT(head,key,temp);
}
}
//统计以每个数为起点连续的个数 统计之前看一下他的前驱是否为空 不为空则不用统计了 因为已经统计过了
int max=0;
Hash* cur=NULL;
Hash* next=NULL;
HASH_ITER(hh,head,cur,next)
{
int left=cur->key-1;
HASH_FIND_INT(head,&left,temp);
if(temp)//找到了说明当前数不是本序列的起点 直接跳过
continue;
int count=1;
int right=cur->key+1;
HASH_FIND_INT(head,&right,temp);
while(temp)//说明没有被统计过 注意不应该遍历数组了应该遍历哈希表
{
count++;
right=right+1;
HASH_FIND_INT(head,&right,temp);
}
max=fmax(max,count);
}
return max;
}