首页 > 编程语言 >leetcode算法热题--最长连续序列

leetcode算法热题--最长连续序列

时间:2024-05-04 14:45:09浏览次数:24  
标签:hash nums -- 复杂度 leetcode num 哈希 序列 热题

题目

给定一个未排序的整数数组 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
-10^9 <= nums[i] <= 10^9

题目链接 :https://leetcode.cn/problems/longest-consecutive-sequence/?envType=study-plan-v2&envId=top-100-liked

解答

思路和算法
我们能想到的最简单的方法就是排序,排序之后循环找出最长子序列即可了。但是要保证时间复杂度为O(n),一般的排序都不能满足,我们可以使用哈希表来解决这个问题,因为哈希表查找的时间复杂度为O(1),所有我们先将数组中的值全部存入哈希表中,随后我们就遍历哈希表,同时计算以当前数向后的最长子序列为多少,当然,如果当前数的前驱数有的话我们就能跳过这个数,因为在它的前驱数就已经计算过最长序列了。

代码
class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> hash;
        //将nums数组元素存入哈希表
        for(auto num : nums)
        {
            hash.insert(num);
        }
        //最长序列初始化为0
        int res = 0;
        //遍历哈希表
        for(auto num : hash)
        {
            //判断前驱数
            if (!hash.count(num - 1))
            {
                int currentnum = num;
                int tmp = 1;
                //寻找以num为起点的最长序列
                while(hash.count(currentnum+1))
                {
                    currentnum+=1;
                    tmp+=1;
                }
                //选择最长序列
                res=max(tmp,res);
            }
        }
    return res;
    }
};
复杂度分析

时间复杂度:O(n),其中 n 为数组的长度。只有当一个数是连续序列的第一个数的情况下才会进入内层循环,然后在内层循环中匹配连续序列中的数,因此数组中的每个数只会进入内层循环一次。
空间复杂度:O(n),哈希表存储数组中所有的数需要 O(n)的空间。

标签:hash,nums,--,复杂度,leetcode,num,哈希,序列,热题
From: https://www.cnblogs.com/oyoy/p/18172259

相关文章

  • 原生JS表格数据常用总结
    主要是在数据报表这块,做了好几年发现,其实用户最终想要看的并不是酷炫的BI大屏,而是最基础也是最复杂的中国式报表.更多就是倾向于从表格中去获取数据信息,最简单的就是最好的,于是还是来总结一下表格这块的东西.基础表格先来实现一个最基础的表格,用table标签,......
  • 博客性能优化笔记 | 99分
    闲着没事,拿lighthouse测了一下博客网站的性能评测,发现诊断出的问题还挺多,就顺手优化了一下。这篇文章将记录这个优化的过程。优化前后对比lighthouse检测结果优化前优化后性能面板检测结果FCPDOMContentLoadedLCP优化前764ms1798ms1864ms......
  • 个人算法竞赛模板(2024.5.4)
    精简版:#include<algorithm>#include<cmath>#include<cstring>#include<iostream>#include<map>#include<queue>#include<set>#include<stack>#include<string>#include<vector>#include<......
  • 配置pytorch
    下载pytorchhttps://pytorch.org/下拉找到找到,下图样式查看自己电脑的GPU版本方法1键盘按住Win+R**,输入cmd**在弹出界面输入nvidia-smi比如,我的GUP版本号是12.2方法2搜索nvidia弹出下图所示界面点击帮助--->系统信息在弹出界面点击组件可到下图......
  • CMakeLists.txt --- install使用
    例:cmake_minimum_required(VERSION3.9)project(test)set(CMAKE_BUILD_TYPEDebug)add_library(hahatest.cpp)install(TARGEThahaDESTINATION/home/linxisuo/project/test)install(DIRECTORY${CMAKE_SOURCE_DIR}/testDESTINATION/home/linxisuo)说明:1.安装......
  • View Transitions API 使用
    ViewTransitionsAPI提供了一种机制,可以在更新DOM内容的同时,轻松地创建不同DOM状态之间的动画过渡,这是官方对他的描述,详情请看这里。下方创建好了<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="......
  • Python中出现"No module named 'requests'"的图文解决办法
    第一步第二步第三步第四步第五步 第六步总结第一步找到pycharm中的虚拟环境的位置第二步打开虚拟环境位置的文件夹 找到Scripts的这个文件夹然后复制该文件夹的地址第三步打开“运行”(可以用快捷键WIN+R键打开)然后输入cmd第四步切换目录到虚拟环境......
  • pythony插件操作cloudflare
    https://juejin.cn/s/cloudflare%20dns%20api%20python通过安装CloudflareDNSAPI是Cloudflare提供的一组API接口,允许用户通过程序化方式管理其DNS记录。Python是一种流行的编程语言,可以通过它来编写与CloudflareDNSAPI交互的程序。下面是一些使用Python......
  • CF-600-E-启发式合并
    600-E题目大意给定一颗\(n\)个节点的树,根为\(1\)。树上的每个节点\(i\)都有一个颜色\(c_i\)。如果一个颜色在以\(x\)为根的子树中出现次数最多,那么称该颜色为主要颜色,显然,一颗树中可以有多个主要颜色。求出对于每个节点为根时,其子树中所有主要颜色的编号和。Solution启发式......
  • CMakeListx.txt --- include_directories和target_include_directories命令
    1. include_directories语法include_directories([AFTER|BEFORE][SYSTEM]dir1[dir2...])作用将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。参数默认情况下,include_directories命令会将目录添加到列表最后,可以通过命令设置......