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)
