题解一:
哈希表:找连续最长的数字序列,很容易联想到排序,但排序的时间复杂度O(nlogN)过大,判题容易超时。因此我们需要使用哈希表来快速查找,序列中是否存在与某个数相邻的数。用HashSet建立哈希表并去重,为了降低同一连续序列中重复查找的次数,我们先判断一个数字是否是连续序列的第一个值,如果是则循环搜索之后连续的值,如果不是则跳过。同时维护一个最长序列长度并返回。
import java.util.HashSet;
import java.util.Set;
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
int longest = 0;
int temp = 0;
for (int num : nums) {
if (!set.contains(num - 1)) {
while (set.contains(num)) {
temp += 1;
num++;
}
}
if (temp > longest) longest = temp;
temp = 0;
}
return longest;
}
}