题目:
题解:
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;
}