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的橙子2 小时前
每日算法刷题 Day3 5.11:leetcode数组2道题,用时1h(有点慢)
算法·leetcode
?abc!7 小时前
缓存(5):常见 缓存数据淘汰算法/缓存清空策略
java·算法·缓存
BioRunYiXue7 小时前
一文了解氨基酸的分类、代谢和应用
人工智能·深度学习·算法·机器学习·分类·数据挖掘·代谢组学
Dddle17 小时前
C++:this指针
java·c语言·开发语言·c++
不見星空8 小时前
2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题
c语言·c++·蓝桥杯
jiunian_cn8 小时前
【c++】异常详解
java·开发语言·数据结构·c++·算法·visual studio
梁下轻语的秋缘8 小时前
每日c/c++题 备战蓝桥杯(洛谷P1387 最大正方形)
c语言·c++·蓝桥杯
工藤新一¹9 小时前
蓝桥杯算法题 -蛇形矩阵(方向向量)
c++·算法·矩阵·蓝桥杯·方向向量
Levin__NLP_CV_AIGC9 小时前
解决pip安装PyPI默认源速度慢
算法·pip
Helibo449 小时前
GESPC++六级复习
java·数据结构·算法