首页 > 其他分享 >128. 最长连续序列

128. 最长连续序列

时间:2024-12-26 16:52:22浏览次数:5  
标签:pre tmp cur nums 序列 num ans 128 最长

  1. 题目链接

  2. 解题思路:难点在于时间复杂度O(n),如果直接排序,题目就简单了。但是不需要全部有序,只需要每次从其中拿出一个数,是递增的即可,也就是说,使用优先级队列,堆头是最小值。注:该方法仍然是O(n*logn)

  3. 代码

    class Solution:
        def longestConsecutive(self, nums: List[int]) -> int:
            if not nums:
                return 0
            pq = []
            ans = 0
            for i in range(len(nums)):
                heapq.heappush(pq, nums[i])
            cur = 1
            pre_num = heapq.heappop(pq)
            while pq:
                tmp = heapq.heappop(pq)
                if tmp == pre_num:
                    continue
                if pre_num == tmp - 1:
                    cur += 1
                    pre_num = tmp
                else:
                    ans = max(ans, cur)
                    cur = 1
                    pre_num = tmp
            ans = max(ans, cur)
            return ans
    
  4. 方法二:把所有数加入到集合,每次从集合中取出一个数x,我们期望的是找到x+1,找到x+1后,我们期望找到x+2,所以用一个while循环即可。

    • 这里面代码有优化,当我们找到一连串的x, x+1, x+2, ... , x+k时,再从x+1开始时,就不用找了,因为找过一遍了

    • 代码

      class Solution:
          def longestConsecutive(self, nums: List[int]) -> int:
              if not nums:
                  return 0
              nums_set = set(nums)
              ans = 0
              for num in nums_set:
                  if num - 1 not in nums_set:    # 避免重复计算
                      cur_num = num
                      cur_len = 1
                      while cur_num + 1 in nums_set:
                          cur_num += 1
                          cur_len += 1
                      ans = max(ans, cur_len)
              return ans
      

标签:pre,tmp,cur,nums,序列,num,ans,128,最长
From: https://www.cnblogs.com/ouyangxx/p/18633528

相关文章

  • 【深基15.习9】验证栈序列
    题目描述给出两个序列pushed和poped两个序列,其取值从1到\(n(n\le100000)\)。已知入栈序列是pushed,如果出栈序列有可能是poped,则输出Yes,否则输出No。为了防止骗分,每个测试点有多组数据,不超过\(5\)组。输入格式第一行一个整数\(q\),询问次数。接下来\(q\)个询问,......
  • DRF之序列化器【2】源码流程
    目录前言1.流程概述2.创建字段对象3.创建类4.实例化类5.序列化过程5.1UserSerializer类5.2ListSerializer类6.总结前言序列化器是Django框架中的一个重要概念,用于在Python对象和JSON等格式之间进行相互转换。通过序列化器,我们可以方便地将模型实例转换为JS......
  • HNOI2016 序列 题解
    HNOI2016序列题解我做离线版本时往了偏序方向想,但是发现非常麻烦。直到看到了在线版本的容斥做法,发现既好写又跑得快。首先考虑容斥,我们不妨把一个询问\([L,R]\)中最小值的位置\(pos\)求出来。子区间跨过\(pos\),贡献即\((pos-L+1)\times(R-pos+1)\timesa_{pos}\)。......
  • 506 最长上升子序列II
    //506最长上升子序列II.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/647给定一个长度为n的数组a1,a2,…,an,问其中的最长上升子序列的长度。也就是说,我们要找到最大的m以及数组p1,p2,…,pm,满足1≤p1......
  • 505 最长回文子串2
    //505最长回文子串2.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/698给定一个长度为n的数组a1,a2,…,an,问其中的最长回文子串长度。定义子串al,al+1,…,ar为回文子串,当且仅当这个子串正着看和反着看是......
  • VMware15如何安装?附安装包和序列号
    前言大家好,我是小徐啊。VMware是我们在Java开发中,常用的一款工具,可以让我们开启虚拟机,这样就可以有linux的环境了。但是VMware一般是需要序列号的,今天小徐就来介绍下如何安装VMware,以及提供序列号。文末附获取方式。如何安装VMware首先,双击下安装包,开始安装。点击下一步按钮。......
  • 创建用于预测序列的人工智能模型,评估模型的能力。
    上一篇:《创建用于预测序列的人工智能模型(三),训练模型》序言:对于当前的动则几千亿的大语言模型来说,训练的过程可以持续几天几周基于几个月,这取决于拥有的硬件数量以及总要训练的参数。模型训练完成后就进入模型的评估验证过程,一般会不断的重复直到优化完成。评估人工智能模型的性......
  • 105. 从前序与中序遍历序列构造二叉树
    题目链接解题思路:首先我们得知道人工怎么建这棵树。先序遍历[0,R1]第一个节点,就是根。然后我们在中序遍历[0,R2]找到根的位置,假如是x,那么,中序遍历中[0,x-1]就是左子树,中序遍历中[x+1,R2]就是右子树。那么先序遍历呢?左子树节点个数是x个,先序遍历是要先遍历完左子树,才能到......
  • 401 最长回文子串
    //401最长回文子串.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/933给你一个字符串s,字符串由小写字母组成,现在你需要求出s中最长的回文子串的长度。输入格式一行一个字符串s。输出格式输出一个整......
  • 使用Excel制作通达信自定义“序列数据“
    序列数据的视频教程演示Excel制作通达信自定义序列数据1.序列数据的制作方法:删掉没有用的数据(行与列)和股代码格式处理,是和外部数据的制作方法是相同,自己上面看历史博文。只需要判断一下,股代码跟随的字符串,是前缀(字符串+股代码)还是后缀(股代码+字符串),然后对应的Excel命......