题干
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
想法
题很好读懂
就是找这个数组里的连续的数的最大长度
最开始自然想到排序以后直接遍历就行了
但是它有时间要求所以不行
然后如果这个数组有重复怎么办呢,显然我们要去重
好 那就直接用hashset来存储
存储全部的元素以后,我们遍历set里的所有元素,如果当前这个num-1是不存在与set的,也就是说现在的这个set一定是这个序列的开头元素,所以再在这个基础上进行遍历,查看这个元素++是否还在说set即可
因为hashset的查找效率是 0(1),所以也很舒适
直接看代码吧
java代码
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> num_set=new HashSet<>();
int longStreak=0;
for( int num:nums){
num_set.add(num); }
for(int num: num_set){
if(!num_set.contains(num-1)){
int currentNum=num;
int currentStreak=1;
while(num_set.contains(currentNum+1)){
currentNum++;
currentStreak++;
}
longStreak=Math.max(currentStreak,longStreak);
}
}
return longStreak;
}
}