题目描述
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题
实现思路
核心要素两点:
1、当前元素的前驱是否在这个数组中,如果在,跳过这个执行下一个元素的判断
2、当前元素的前驱不在,这个数字是开始的一个前驱,需要从这个数字向后遍历,用while循环判断是否在数组中有依序的后继元素
代码实现
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 maxLength = 0;
//去重
int []tmp = new int[nums.length];
int current ;
for(int i=0; i< nums.length ; i++){
if(!set.contains(nums[i] - 1)){
tmp[i] = 1;
current = nums[i];
while (set.contains(current+1)){
tmp[i] += 1;
current = current+1;
}
if(tmp[i] > maxLength){
maxLength = tmp[i];
}
}
}
return maxLength;
}
}
通过运行
## 题目总结
这道题需要一个讨巧的思维转换,防止每次新节点重复执行,没有利用上连续的这个线索