128. 最长连续序列
1. 题目
给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n)
的算法解决此问题。
示例 1:
1 | 输入:nums = [100,4,200,1,3,2] |
示例 2:
1 | 输入:nums = [0,3,7,2,5,8,4,6,0,1] |
提示:
0 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9
2. 思路
- 已知题目中描述数组为乱序数组,同时需要找出所有的连续最长子序列
- 因此首先对数组进行排序,排序达到的时间复杂度为
O(nlogn)
- 初始化
result
变量作为结果,初始化l
为左指针同时初始化r
为右指针,初始化sameCount
计数变量统计过程中一样的数值 - 遍历
nums
数组:- 如果当前
r
指针对应的数值与r
指针的前一个数值一致,将sameCount
变量+1 - 如果当前
r
指针对应的数值与r
指针的前一个数值不形成连续序列,则重置l
指针为当前的r
指针,同时重置sameCount
变量
- 如果当前
- 实时统计最新的
result
变量为:r - l + 1 - sameCount
,减去sameCount
的原因是因为同样的字符不计入最长连续序列的长度中,移动r
指针往右一个单位 - 遍历完成
nums
数组后,直接返回结果变量result
3. 代码
1 | class Solution { |
4. 复杂度
- 时间复杂度:O(nlog(n))
- 空间复杂度:O(1)