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

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

这道题中要求时间复杂度为O(n),首先我们可以知道的是,如果先对数组排序再计算其最长连续序列的时间复杂度是O(nlogn),所以不能用排序的方法。我一开始想是不是应该用动态规划来解,发现其并不符合动态规划的特征。最后采用类似于中出现的数据结构(集快速查询和顺序遍历两大优点于一身)来解决问题。具体来说其数据结构是HashMap<Integer,LNode>,key是数组中的元素,所有连续的元素可以通过LNode的next指针相连起来。

总体思路是,顺序遍历输入的数组元素,对每个元素先看下HashMap的key中是否已经有这个元素,如果有则无需做任何事情,如果有,再看下这个元素的左邻居也就是比它小1的元素是否在,如果在的话把左邻居的LNodel的next指针指到当前这个元素的LNode,然后再看右邻居的元素是否存在hashmap中,如果在,则把当前指针的next指到右邻居节点上,通过反复这样的操作,最后所有连续的sequece的LNode都被连在一起。

之后再计算哪个连续的链表长度最长。

下面是AC代码:

1 class LNode{2     int ele;3     LNode next;4     public LNode(int _ele){5         ele = _ele;6     }7 }

 

1 /** 2      * Longest Consecutive Sequence 3      * Given an unsorted array of integers, find the length of the longest consecutive elements sequence. 4      * O(n) 5      * @param num 6      * @return 7      */ 8     public int longestConsecutive(int[] num){ 9         //the most important data structure;10         HashMap
kv = new HashMap
(num.length);11 int max = 0;12 for(int n: num){13 if(!kv.containsKey(n)){14 LNode l = new LNode(n);15 if(kv.containsKey(n-1))16 kv.get(n-1).next = l;17 if(kv.containsKey(n+1))18 l.next = kv.get(n+1);19 kv.put(n, l);20 }21 }22 Iterator
it = kv.values().iterator();23 //k is used to keep tracking those node who has been caculated in other sequences24 //it is to reduce the time complexity, to insure the O(n) time complexity25 HashMap
k = new HashMap
();26 27 while(it.hasNext())28 {29 LNode temp = it.next();30 if(!k.containsKey(temp.ele))31 {32 int nu = 1;33 while(temp.next!=null){34 temp = temp.next;35 k.put(temp.ele, temp);36 //kv.remove(temp.ele);37 nu++;38 }39 if(nu>max)40 max = nu;41 }42 }43 return max;44 }

 

转载于:https://www.cnblogs.com/echoht/p/3694584.html

你可能感兴趣的文章
给Visual Studio 2010添加Windows Phone 7模板
查看>>
一次 web 工程性能测试
查看>>
wordpress 伪静态nginx设置
查看>>
今天写sql无意中发现了一个深坑
查看>>
记一次dell R720服务器ESXI5.5系统宕机的奇葩经历
查看>>
CMD一键获取 所有连接过的WIFI密码
查看>>
RabbitMQ
查看>>
android 下修改 hosts文件 及 out of memory的解决
查看>>
cocos2d win7 安卓环境配置开发
查看>>
java面试题之六(转)
查看>>
jQuery零基础入门——(六)修改DOM结构
查看>>
Java8 当 Lambda 遇上受检异常
查看>>
什么是竞态条件? 举个例子说明。
查看>>
PM日记:小试1 中午时光
查看>>
opensans字体
查看>>
FLEX入门学习路线图
查看>>
(六)用JAVA编写MP3解码器——帧数据结构
查看>>
Syntax error, parameterized types are only available if source level is 1.5
查看>>
第一个php扩展
查看>>
a href=javascript:void(0)在ie6下可能会有问题
查看>>