博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【ATT】Longest Consecutive Sequence
阅读量:5044 次
发布时间:2019-06-12

本文共 1324 字,大约阅读时间需要 4 分钟。

Q:

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.

A:使用Map来处理。对cluster来说,最重要的是上界,下界和长度。

对于a[i],只需要检查a[i]-1,a[i]+1

映射上界下界到区间长度。merge 相邻的cluster时,只需要更新上界和下界对应的区间长度。

//1. The key factors about a cluster is: lowest, highest, and length.//2. Map lowest and highest to length. To merge two neighbor clusters, only need to update it's new lowest and highest, with new length.//3. For every a[i], checking its neighbor a[i]-1 and a[i]+1 is enough.    int longestConsecutive(vector
&num) { // Start typing your C/C++ solution below // DO NOT write int main() function if(num.empty()) return 0; int maxlen = 1; //注意,初始化时1,而不是0 map
hmap; for(int i=0;i
& hmap,int left,int right) { int lower = left-hmap[left]+1;//新区间的下届 int upper = right+hmap[right]-1; //新区间的上届 int len = upper - lower +1; hmap[lower] = len; hmap[upper] = len; return len; }

  

转载于:https://www.cnblogs.com/summer-zhou/p/3326652.html

你可能感兴趣的文章
android调试debug快捷键
查看>>
【读书笔记】《HTTP权威指南》:Web Hosting
查看>>
Inoodb 存储引擎
查看>>
数据结构之查找算法总结笔记
查看>>
Linux内核OOM机制的详细分析
查看>>
Android TextView加上阴影效果
查看>>
Requests库的基本使用
查看>>
C#:System.Array简单使用
查看>>
C#inSSIDer强大的wifi无线热点信号扫描器源码
查看>>
「Foundation」集合
查看>>
算法时间复杂度
查看>>
二叉树的遍历 - 数据结构和算法46
查看>>
类模板 - C++快速入门45
查看>>
centos7 搭建vsftp服务器
查看>>
RijndaelManaged 加密
查看>>
Android 音量调节
查看>>
HTML&CSS基础学习笔记1.28-给网页添加一个css样式
查看>>
windows上面链接使用linux上面的docker daemon
查看>>
Redis事务
查看>>
Web框架和Django基础
查看>>