Longest Consecutive Sequence
https://leetcode.com/problems/longest-consecutive-sequence/description/
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example, Given
[100, 4, 200, 1, 3, 2]
,Your algorithm should run in O(n) complexity.
Thoughts
这道题有两种解法. online是维持一个map, 记录num和包含它的最长sequence当前能有多长.
然后我们每遇到一个Num, 检查num-1和num+1是否在Map里, 如果在则意味着当前点能和他们构成更长的sequence, 我们就更新它所在的新生成的sequence的 boundary 的长度。 boundary怎么获得呢? 实际上当前节点既然能和其它点结合形成更长的sequence, 也就意味着num-/+1是sequence原来的boundary, 也就是说可以通过它们的len推出seq另一边是哪个数字。
offline解法也和boundary有关, 只是不再需要两边boundary, 要小的那边就够了。 我们先把所有数字都放到集合里. 然后遍历, 对num检查是否存在num - 1, 存在则意味着当前数字不是boundary, 不存在则分别检查num + 1, + 2, + 3...是否在set里. 依次检查每个boundary能最长有多长。由于每个元素只会遍历两次,本身的一次,以及从boundary往上遍历过来的一次,总时间O(N)。
Code
Analysis
时空复杂度都是O(N).
Last updated
Was this helpful?