LeetCode-128-最长连续序列

思路
首先想到是进行排序,但是这样时间复杂度为O(nlogn),不满足题意的O(n),那么考虑其他办法。将所有数放入哈希表中,然后对每个元素,寻找连续的下一个,更新最大长度。这样会有个问题,
比如[100,4,200,1,3,2]这样一个数组,对于2要遍历,1也要遍历,其实是重复的。因此只需要,寻找当前元素x的是否存在前一个x-1,保证每个需要遍历的元素都是第一个。
代码
class Solution {
public int longestConsecutive(int[] nums) {
//放入hash表
Set<Integer> set=new HashSet<>();
for(int num:nums){
set.add(num);
}
int maxlen=0;
//遍历hash表
for(int num:set){
//第一个元素
if(!set.contains(num-1)){
int curnum=num;
int curlen=1;
//进入遍历
while(set.contains(curnum+1)){
curnum++;
curlen++;
}
//更新最大长度
maxlen=Math.max(curlen,maxlen);
}
}
return maxlen;
}
}
本文讲解了解决LeetCode 128题的最长连续序列问题,通过使用哈希表优化查找效率,避免重复遍历,并分享了一段Java代码实现。关键在于利用哈希表快速找到前驱元素,减少不必要的搜索,达到O(n)的时间复杂度。
1264

被折叠的 条评论
为什么被折叠?



