LeetCode解题 128:Longest Consecutive Sequence
Problem 128: Longest Consecutive Sequence [Hard]
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]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.
来源:LeetCode
解题思路
使用Hash表进行存储和查找。对于每个数字分别向左和向右扩展至最大长度,并更新maxLen。
具体思路:
- 首先将nums用Hash表存储。
- 遍历Hash表内元素,如果已经访问过则不再访问(说明该元素所在序列的长度已知)。
- 对于每个元素,分别向左和向右扩展,直到扩展的数不在nums内,计算连续长度并更新maxLen。
- 将当前元素和扩展到的元素都加入访问列表visited中。
减少执行用时的设计:
- 使用visited存储已经访问过的元素,防止重复访问。
- 在
N - visited.size() <= maxLen
时退出遍历,因为剩下未访问过的元素长度不可能再超过当前的maxLen。
因为Hash表中查找元素只需要 O ( 1 ) O(1) O(1)时间,每个元素只访问一次,因此时间复杂度为 O ( n ) O(n)