学渣带你刷Leetcode0128最长连续序列

题目描述

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)。

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

白话题目:
 

算法:

 

详细解释关注 B站  【C语言全代码】学渣带你刷Leetcode 不走丢 https://www.bilibili.com/video/BV1C7411y7gB

C语言完全代码

int cmp(const void* a, const void* b)
{
    int pa = *(int *)a;
    int pb = *(int *)b;

    if (pa > pb) {
        return 1;
    } else if (pa = pb) {
        return 0;
    } else {
        return -1;
    }
}

int delmore(int* nums, int numsSize, int* buf) 
{
    int *p = nums;
    int *pb = buf + 1;
    int *q;
    int res = 1;

    int i = 1; 
    while (i < numsSize) {
        q = nums + i;
        if (*q != *p) {
            *pb = *q;
            p = q;
            pb++;
            res++;
        } 
        i++;
    }
    
    return res;
}

int longestConsecutive(int* nums, int numsSize){
    if (numsSize <= 1) {
        return numsSize;
    }

    int buf[numsSize];
    int bufsize = numsSize;
    
    qsort(nums, numsSize, sizeof(int), cmp);
    buf[0] = nums[0];
    bufsize = delmore(nums, numsSize, buf);
 
    int i = 1;
    int* p = buf;
    int* h = p;
    int* q = p + 1;
    int Maxlen = 1;

    while (i < bufsize) {
        if (*q != *p + 1) {
            h = q;
            p = q;
        } else {
            p++;            
        }
        q++;
        Maxlen = Maxlen > (q - h) ? Maxlen : (q - h);
        i++;
    }
     
    return Maxlen;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章