问题描述
给定一个未排序的整数数组,找出最长连续序列的长度。在这里插入代码片
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
解决思路
1、将所有数组装进HashSet中,HashSet的查询时间复杂度为O(1)
2、对数组中每一个元素进行检查
3、如果没有小于当前元素的数,当前元素肯定就是起点
4、从起点处在HashSet里找连续的数
代码
class Solution {
public int longestConsecutive(int[] nums) {
HashSet<Integer> set=new HashSet<>();
for(int i=0;i<nums.length;i++){
set.add(nums[i]);
}
int maxLen=0;//记录最长序列的长度
for(int i=0;i<nums.length;i++){
//找到连续序列的起点
if(!set.contains(nums[i]-1)){
int count=1;//记录序列元素数量
int cur=nums[i];//当前元素
while(set.contains(cur+1)){
count++;
cur++;
}
if(count>maxLen){
maxLen=count;
}
}
}
return maxLen;
}
}