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

128. 最长连续序列

时间:2023-09-05 17:24:02浏览次数:38  
标签:count set nums ++ 序列 num 128 最长 unset

给定一个未排序的整数数组 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

序列不是子串,子串要求连续,而子序列要求不改变相对位置即可,本题只要求元素的值连续,而不要求下标连续。

如果对它尝试排序复杂度是多少

 用set?set内置排序,也是排序。那就unordered_set,向左向右分别find ++

 

伪代码:

扫描添加到unorder set里

for num in set:

  while(num++ exist) count++;

  while(num-- exist) count++;

扫描了很多重复元素,有没有办法单向扫描,避免重复,找出其中最大的,或者最小的?

 

本身是一段一段的存在,只扫一个方向的话,就是靠跳过哪些某个方向包含在set中的元素

举例,往大的方向扫,那么就要求执行的这个位置的数是它所在的连续区间里最小的,如果还有比它小1(一定得是1)的存在,那就直接跳过,只扫那些比它大的。扫到不存在为止

 

要点:

1.unset怎么构造的,使用了nums的迭代器。

2.unset的查询某个元素是否存在的策略可以用find,返回迭代器和end进行比较,或者是使用count查询存在的个数,这在当每个元素只会出现一次时是一样的

class Solution { public:     int longestConsecutive(vector<int>& nums) {         unordered_set<int> unset(nums.begin(), nums.end());
        int historyMax = 0;         for (auto& num : unset){             int count = 1;             if(unset.count(num-1) == 0){                 int s = num;                 while(unset.count(++s) == 1) count++;                 historyMax = max(historyMax, count);             }         }         return historyMax;     } };

 

标签:count,set,nums,++,序列,num,128,最长,unset
From: https://www.cnblogs.com/synapse331/p/17680188.html

相关文章

  • 代码源:序列删除
    有n个数字a1,a2,…,an,我们要把除了a1,an之外的其他数字删除,删除一个数字的代价是它乘上它相邻两个还没有被删除的数字的值,请求出最小代价是多少。输入格式第一行一个整数n。接下来一行n个整数a1,a2,…,an。输出格式一个整数,表示答案。样例输入556427样例......
  • Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均
    全文链接:https://tecdat.cn/?p=33550原文出处:拓端数据部落公众号什么是时间序列?时间序列是一系列按时间顺序排列的观测数据。数据序列可以是等间隔的,具有特定频率,也可以是不规则间隔的,比如电话通话记录。在进行投资和交易研究时,对于时间序列数据及其操作要有专业的理解。本文......
  • homebrew安装软件出现git问题fatal: not in a git directory,Error: Command failed w
    homebrew安装软件出现git问题问题fatal:notinagitdirectoryError:Commandfailedwithexit128:git问题查找1.brew-v查看问题logsuyf@suyfdeMac-mini~%brew-vHomebrew4.0.18-18-g64259a4fatal:detecteddubiousownershipinrepositoryat'/op......
  • NLP 序列标注
    转载:https://blog.csdn.net/kevinjin2011/article/details/113939817序列标注(Sequencelabeling)是NLP问题中的基本问题。在序列标注中,我们想对一个序列的每一个元素标注一个标签。一般来说,一个序列指的是一个句子,而一个元素指的是句子中的一个词。 NLP中的序列标注方式常用的......
  • 精简深拷贝ArrayList实例(包括递归和序列化方法)
    作者fbysss关键字:深拷贝,序列化前言:     日前一哥们问我一个有关多层ArrayList拷贝的问题,我帮他写了一个例程,感觉以后用得着,便放上来了。如果要在自身类中加入Clone功能,需要implementsICloneable接口,然后用下面的相应代码重写clone方法即可。源代码:packagecom.sss.t......
  • 序列化和反序列化二叉搜索树
    设计一个算法来序列化和反序列化二叉搜索树对序列化/反序列化算法的工作方式没有限制您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。1.非递归先序遍历+编码classCodec{public://Encodesatreetoasinglestring.......
  • 刷题[Leetcode]3. 无重复字符的最长子串
    3. 无重复字符的最长子串classSolution{public:  intlengthOfLongestSubstring(strings){    if(s.size()==0)return0;    unordered_set<int>unset;    intmaxLen=0;    intleft=0;    for(intright=......
  • 代码随想录算法训练营第二十九天| 491.递增子序列 46.全排列 47.全排列 II
     491.递增子序列   卡哥建议:本题和大家刚做过的 90.子集II 非常像,但又很不一样,很容易掉坑里。 https://programmercarl.com/0491.%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97.html  视频讲解:https://www.bilibili.com/video/BV1EG4y1h78v  做题思路......
  • 统计一个字符串的 k 子序列美丽值最大的数目
    k子序列指的是s的一个长度为k的子序列,且所有字符都是唯一的,也就是说每个字符在子序列里只出现过一次。定义f(c)为字符c在s中出现的次数。k子序列的美丽值定义为这个子序列中每一个字符c的f(c)之和1.贪心+组合枚举贪心选美丽值最大的字符,对于最后美丽值相......
  • Java反序列化:CommonsCollections6调试分析
    JDK8u71大版本中AnnotationInvocationHandler.readObject被修改了,为了使得CC1能够利用,又造了一条CC6CC6解决的是CC1在高版本jdk上无法利用的问题这里搬一下web佬Boogipop的整理图:环境搭建JDK测试版本:JDK11基础知识1.CC1和CC6的恶意代码执行触发链再来捋顺一下这条恶......