算法-数组的最长连续序列长度
1、数组的最长连续序列长度
题目是Hard级别的,因为我们要把时间复杂度降低到n
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
看到这个题目,首先想到的就是排个序,找连续序列,但是时间复杂度不满足要求
但是借助HashSet我们可以做到n
1、遍历数组,放入HashSet
2、遍历数组,看小于当前元素的值n-1是不是在HashSet里面,如果不是,我们计算以当前值n开头的连续序列长度
3、由于我们只会从序列开头遍历,因此每个元素访问了一次,所以,时间复杂度为n
public int longestConsecutive(int[] nums) {
Set<Integer> set=new HashSet<>();
for(int n:nums){
set.add(n);
}
int maxLen=0;
for(int n:nums){
if(!set.contains(n-1)){//判断元素是不是数列开头
int count=0;
while(set.contains(n++)){//判断序列是否到头了
count++;
}
maxLen=maxLen>count?maxLen:count;
}
}
return maxLen;
}