【题目】

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

【题意】

给定一个未排序的整数数组。找长度最长的连续整数串序列。并返回长度。 复杂度要求O(n)

【思路】

O(n)不一定是one pass, 脑子里总是有这么种固定思维,自己给自己挖了个坑。O(kn)也是O(n), 仅仅要k是常数。
    要找连续串,又不能排序,那我们要构造一个类列表结构把连续的数串起来。

那么怎么串呢?非常显然,给定一个数N。那我们须要知道他的前一个数prev和它的后一个数next是否存在,假设存在我们就能够串到prev或者next, 假设不存在则连续串就结束鸟。我们用一个map来表示这样的前后继关系。
    prev=N-1; next=N+1; 假定N是存在于数组中的。则map[N]=1
    假设prev也在数组中,则map[prev]=1, 否则map[prev]=0
    假设next也在数组中,则map[next]=1, 否则map[next]=0
    
    我们对数组进行两遍扫描:
    第一遍扫描是我们生成前后关系map
    第二遍扫描利用前后关系恢复连续串,恢复过程中相应数的map[i]都置为0,避免反复恢复

【代码】

class Solution {
public:int longestConsecutive(vector<int> &num) {int size=num.size();if(size==0)return 0;//第一遍扫描建立前后关系mapmap<int, int> exist;for(int i=0; i<size; i++){exist[num[i]]=1;if(exist[num[i]-1]!=1)exist[num[i]-1]=0;if(exist[num[i]+1]!=1)exist[num[i]+1]=0;}//第二遍扫描int maxLength=0;for(int i=0; i<size; i++){if(exist[num[i]]==1){//恢复串int length=1;int number=num[i]-1;while(exist[number]==1){length++; exist[number]=0; number--;}number=num[i]+1;while(exist[number]==1){length++; exist[number]=0; number++;}if(length>maxLength)maxLength=length;}}return maxLength;}
};

LeetCode: Longest Consecutive Sequence [128]相关推荐

  1. LeetCode:Longest Consecutive Sequence

    题目链接 Given an unsorted array of integers, find the length of the longest consecutive elements sequen ...

  2. [LeetCode] Longest Consecutive Sequence 求解

    为什么80%的码农都做不了架构师?>>>    题目 Given an unsorted array of integers, find the length of the long ...

  3. leetcode 128. Longest Consecutive Sequence | 128. 最长连续序列(Java)

    题目 https://leetcode.com/problems/longest-consecutive-sequence/ 题解 方法1:HashMap 解法,O(n^2) 如下图,假设 n=4 被 ...

  4. leetcode Longest Consecutive Sequence

    #include <iostream> #include <vector> #include <unordered_map>// 时间复杂度是O(n), 空间复杂度 ...

  5. LeetCode: Longest Consecutive Sequence

    想到map了,可惜没想到用erase来节省空间,看了网上答案 1 class Solution { 2 public: 3 int longestConsecutive(vector<int&g ...

  6. [leetcode]Longest Consecutive Sequence

    这道题目一看就去翻答案了,因为以前见过,知道并查集可以用来做分组,但这样的题目真的要并查集么?想想也是HashSet之类就能搞定么.果然是HashMap而不是HashSet.下面这个解法我比较容易理解 ...

  7. 298. Binary Tree Longest Consecutive Sequence

    题目: Given a binary tree, find the length of the longest consecutive sequence path. The path refers t ...

  8. LeetCode 128. 最长连续序列(Longest Consecutive Sequence)

    题目描述 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1 ...

  9. 128. Longest Consecutive Sequence

    Title 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [ ...

最新文章

  1. MySQL集群系列2:通过keepalived实现双主集群读写分离
  2. iOS中EXC_BAD_ACCESS解决办法
  3. 进化吧!我的C++!!
  4. iOS开发之ReplayKit框架学习
  5. word粘贴至html特殊字符 粘贴后可能为乱码
  6. 代码的世界里的一群精神病人
  7. 这本 Kindle 排名第一的 Python 3 入门书,火遍了整个编程圈!| 码书
  8. 流媒体协议地址获取 rtmp
  9. Git:git commit后撤销commit 提交
  10. CAXA图文档2007服务器端,CAXA图文档客户端系统管理员操作.doc
  11. 如何将App程序发布到苹果App Store
  12. 线性代数学习笔记(二十八)——齐次方程组的解
  13. android三星打印插件,三星打印服务插件 Samsung Print Service for Android
  14. 三态门及其在I2C总线中的应用_普中_89C52单片机
  15. 精度检验方法(之二分类)
  16. k8s dashboard安装
  17. Recipient List camel并行
  18. WINCE 车机系统介绍
  19. 基于vue3的京东nutui组件库的表单校验规则:怎样进行表单验证?怎样只使用指定的某一个规则进行校验呢?
  20. 服务器系统日志事件id41,系统莫名重启,系统相关日志中出现事件ID:41,1001,6008,请问这是什么原因导致...

热门文章

  1. 随机森林c语言编程,一种基于随机森林的C语言源代码静态评分方法与流程
  2. android自定义minitype,MiniType部类以及扩展名
  3. 【星球知识卡片】换脸算法和人脸驱动都有哪些核心技术,如何对其长期深入学习...
  4. 【NLP机器学习基础】从线性回归和Logistic回归开始
  5. 【有三说深度学习】深度学习前夕
  6. 全球及中国民办教育行业规模预测与发展对策建议报告2022版
  7. 我写的一个给time_t赋值的小函数
  8. 打造微量元素产业-丰收节交易会·李喜贵:签约南国健康产业
  9. Django中的日期和时间格式 DateTimeField
  10. 天天沉迷于皇上本宫的都是sb