leetcode128.最长连续序列

题目描述

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入:nums = [100,4,200,1,3,2]

输出:4

解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]

输出:9

提示:

0 <= nums.length <= 10^5

-109 <= nums[i] <= 10^9

解题思路

方法一:排序+双指针

c 复制代码
int cmp(const void *a,const void *b){
    return (*(int*)a)-(*(int*)b);
}
int longestConsecutive(int* nums, int numsSize) {
    qsort(nums,numsSize,sizeof(int),cmp);
    int low=0;
    int ans=1;//数组长度为1,ans不更新
    int cur=1;
    for(int fast=1;fast<numsSize;fast++){
        if(nums[low]==nums[fast])
            continue;
        else if(nums[low]+1==nums[fast]){
            cur++;
            ans=fmax(ans,cur);
        }
        else
            cur=1;
            low=fast;
    }
    return numsSize>0?ans:0;
}

方法二:哈希表

c 复制代码
int longestConsecutive(int* nums, int numsSize) {
    // 创建哈希表
    int* hash_table = (int*)calloc(1000000, sizeof(int));
    
    // 将数字存入哈希表
    for (int i = 0; i < numsSize; i++) {
        hash_table[nums[i] + 500000] = 1;
    }
    
    int longestStreak = 0;
    
    // 遍历哈希表,找到最长的连续序列
    for (int i = 0; i < 1000000; i++) {
        if (hash_table[i]) {
            int currentNum = i - 500000;
            int currentStreak = 1;
            
            while (hash_table[i + 1]) {
                currentNum += 1;
                currentStreak += 1;
                i++;
            }
            
            longestStreak = (currentStreak > longestStreak) ? currentStreak : longestStreak;
        }
    }
    
    free(hash_table);
    return longestStreak;
}
相关推荐
爱coding的橙子4 分钟前
每日算法刷题Day27 6.9:leetcode二分答案2道题,用时1h20min
算法·leetcode·职场和发展
GalaxyPokemon15 分钟前
LeetCode - 3. 无重复字符的最长子串
算法·哈希算法·散列表
a.30223 分钟前
C++ 时间处理指南:深入剖析<ctime>库
数据结构·c++·算法
亮亮爱刷题32 分钟前
算法刷题-回溯
算法
Neil今天也要学习1 小时前
永磁同步电机无速度算法--自适应龙贝格观测器
算法
算AI3 小时前
AI辅助编程:常用的7种Prompt模式
人工智能·算法
TY-20253 小时前
机器学习算法_决策树
算法·决策树·机器学习
CodeWithMe3 小时前
【C/C++】高效的位操作
c语言·c++
子豪-中国机器人3 小时前
C++ 信息学奥赛总复习题
java·jvm·算法
学习噢学个屁4 小时前
基于STM32物联网智能鱼缸智能家居系统
c语言·stm32·单片机·嵌入式硬件·物联网·智能家居