Leetcode(128) Longest Consecutive Sequence
Posted 李建明180
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode(128) Longest Consecutive Sequence相关的知识,希望对你有一定的参考价值。
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
Your algorithm should run in O(n) complexity.
Example:
1 | Input: [100, 4, 200, 1, 3, 2] |
解法
补充以下,这题不用考虑数组中元素想等的情况,比如[1, 1, 1, 1]的输出为1。
这题的方法有点难想,最后参考的网上的解法:
使用一个集合HashSet存入所有的数字,然后遍历数组中的每个数字,如果其在集合中存在,那么将其移除,然后分别用两个变量pre和next算出其前一个数跟后一个数,然后在集合中循环查找,如果pre在集合中,那么将pre移除集合,然后pre再自减1,直至pre不在集合之中,对next采用同样的方法,那么next-pre-1就是当前数字的最长连续序列,更新res即可。这里再说下,为啥当检测某数字在集合中存在当时候,都要移除数字。这是为了避免大量的重复计算,就拿题目中的例子来说吧,我们在遍历到4的时候,会向下遍历3,2,1,如果都不移除数字的话,遍历到1的时候,还会遍历2,3,4。同样,遍历到3的时候,向上遍历4,向下遍历2,1,等等等。如果数组中有大量的连续数字的话,那么就有大量的重复计算,十分的不高效。
具体代码如下:
1 | class { |
以上是关于Leetcode(128) Longest Consecutive Sequence的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 128. Longest Consecutive Sequence
Leetcode(128) Longest Consecutive Sequence
LeetCode128 Longest Consecutive Sequence
128. Longest Consecutive Sequence(leetcode)