给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
原文链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
解题思路:
这些数字用一个 HashSet 保存,实现 O(1)O(1) 时间的查询,同时,我们只对 当前数字 - 1 不在哈希表里的数字,作为连续序列的第一个数字去找对应的最长序列,这是因为其他数字一定已经出现在了某个序列里。
public int longestConsecutive(int[] nums) {
if(nums == null || nums.length == 0)
return 0;
HashSet<Integer> set = new HashSet<>();
for(int item : nums)
set.add(item);
int maxLongest = 0;
for(int i : nums) {
if(!set.contains(i-1)) {
int curNum = i;
int curmaxLongest = 1;
while(set.contains(curNum+1)) {
curNum += 1;
curmaxLongest += 1;
}
maxLongest = Math.max(curmaxLongest, maxLongest);
}
}
return maxLongest;
}