leetcode做题笔记128. 最长连续序列

这篇具有很好参考价值的文章主要介绍了leetcode做题笔记128. 最长连续序列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

思路一:模拟题意(时间复杂度不合要求)

int cmp(const void* a,const void* b){
    return *(int*)a - *(int*)b;
}
int longestConsecutive(int* nums, int numsSize){
    if(numsSize == 0)
        return 0;
    qsort(nums,numsSize,sizeof(int),cmp);
    int max = 1,sum = 1;
    for(int i = 1;i < numsSize;i++){
        if(nums[i] == nums[i - 1] + 1)
            sum++;
        else if(nums[i] == nums[i - 1])
            continue;
        else
            sum = 1;
        max = max > sum ? max : sum;
    }
    return max;
}

思路二:哈希表

#define HASH_BASE  (10031)

int hash_index(int a)
{
    int t;
    
    t = a % HASH_BASE;
    if (t < 0) {
        t = HASH_BASE + t;
    }
    return t;
}

int longestConsecutive(int* nums, int numsSize){
    int i, cnt, lmax, cur;
    bool *hs;

    hs = malloc(sizeof(bool) * (HASH_BASE));
    memset(hs, 0, sizeof(bool) * (HASH_BASE));

    for (i = 0; i < numsSize; i++) {
        hs[hash_index(nums[i])] = true;
    }

    lmax = 0;
    for (i = 0; i < numsSize; i++) {
        if (!hs[hash_index(nums[i] - 1)]) {
            cnt = 1;
            cur = nums[i];
            while (hs[hash_index(cur + 1)]) {
                cnt++;
                cur++;
            }
            if (cnt > lmax) {
                lmax = cnt;
            }
        }
    }
    free(hs);
    return lmax;
}

分析:

本题要求最长连续序列,可以将先将数组内数先排序一遍,再向后不断遍历数组比较得到最长连续序列,但时间复杂度不合要求,可以想到若先将数组内数放置在哈希表中再查找时间复杂度仅为O(n),所以将数存到哈希表中,利用find找到最长连续序列,最后输出即可

总结:

本题考察哈希表的应用,将值存入哈希表中再查找可达到O(n)的时间复杂度文章来源地址https://www.toymoban.com/news/detail-701622.html

到了这里,关于leetcode做题笔记128. 最长连续序列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ( 动态规划) 674. 最长连续递增序列 / 718. 最长重复子数组——【Leetcode每日一题】

    难度:简单 给定一个未经排序的整数数组,找到最长且 连续递增的子序列 ,并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r(l r) 确定,如果对于每个 l = i r ,都有 nums[i] nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

    2024年02月05日
    浏览(52)
  • day55 最长递增子序列 最长连续递增子序列 最长重复子数组

    题目链接 300 最长递增子序列 题意 找到整数数组nums的最长严格递增子序列的长度(子序列并不改变原始的顺序,但是可以删除元素) 动态规划 动规五部曲 1)dp数组及下标i的含义 dp[i] 表示以nums[i]为结尾的最长递增子序列的长度 2)dp数组初始化 根据定义 长度至少是1  dp

    2024年04月11日
    浏览(61)
  • Leetcode:300. 最长递增子序列、674. 最长连续递增序列(C++)

    目录 300. 最长递增子序列 题目描述: 实现代码: 原理思路: 674. 最长连续递增序列 题目描述: 实现代码: 原理思路: 题目描述:         给你一个整数数组  nums  ,找到其中最长严格递增子序列的长度。 子序列  是由数组派生而来的序列,删除(或不删除)数组中

    2024年02月11日
    浏览(57)
  • 算法刷题Day 52 最长递增子序列+最长连续递增子序列+最长重复子数组

    我自己想出来的方法,时间复杂度应该是 O(n2) 滑动窗口 连续的话,可以考虑用滑动窗口 动态规划 贪心算法

    2024年02月14日
    浏览(54)
  • 代码训练LeetCode(5)最长连续序列

    代码训练(5)LeetCode之最长连续序列 Author: Once Day Date: 2024年3月9日 漫漫长路,才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 128. 最长连续序列 - 力扣(LeetCode) 力扣 (LeetCode) 全球极客挚爱的技术成长平台 1. 原题 给定一个未排序的整数数组

    2024年03月24日
    浏览(40)
  • leetcode300. 最长递增子序列 子序列(不连续)

    https://leetcode.cn/problems/longest-increasing-subsequence/ 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 LIS即最长上升子序列,指

    2024年02月14日
    浏览(43)
  • 动态规划9:最长递增子序列、最长连续递增序列、最长重复子数组、最长公共子序列、不相交的线、最长子序和

    例题300: 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 确定dp数组和下标含义 dp[i]表示在第i个元素的最长子序列数

    2024年04月08日
    浏览(44)
  • 双指针问题——求只包含两个元素的最长连续子序列(子数组)

    你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组  fruits  表示,其中  fruits[i]  是第  i  棵树上的水果  种类  。 你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果: 你只有  两个  篮子,并且每

    2024年02月02日
    浏览(30)
  • leetcode 659. 分割数组为连续子序列

    题目链接:leetcode 659 给你一个按 非递减顺序 排列的整数数组 nums 。 请你判断是否能在将 nums 分割成 一个或多个子序列 的同时满足下述 两个 条件: 每个子序列都是一个 连续递增序列(即,每个整数 恰好 比前一个整数大 1 )。 所有子序列的长度 至少 为 3 。 如果可以分割

    2024年02月01日
    浏览(39)
  • leetcode做题笔记115. 不同的子序列

    给你两个字符串  s   和  t  ,统计并返回在  s  的  子序列  中  t  出现的个数。 题目数据保证答案符合 32 位带符号整数范围。 本题要计算t在s子序列的个数,可想到使用动态规划的方法,根据两个字符串的顺序不断向后匹配,当匹配的相同位置字符不相同时调用前面匹

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包