难度 hard
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
进阶:你可以设计并实现时间复杂度为 O(n) 的解决方案吗?
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9
提示:
0 <= nums.length <= 104
-109 <= nums[i] <= 109
解题思路:这道题虽然是hard级别,但解题上还是相对简单的,看了grandyang的题解的。用一个hashse保存数组中的所有元素,然后遍历数组,如果数组中某个元素存在,就把它从hashset中移除,并且令pre=nums[i]-1, next=nums[i]+1,然后继续往hashset中寻找,找到了就移除,这样就是不断地把和当前元素nums[i]能构成连续序列的所有数字都移除掉,然后更细结果,结果res = max(res, next - pre -1),因为退出寻找过程的时候,pre和next已经不是连续序列中的一员了,所以不应该算进连续序列的长度了。
代码 t86 s39 java
class Solution {
public int longestConsecutive(int[] nums) {
HashSet<Integer> st = new HashSet<>();
int res = 0;
for(int num : nums) st.add(num);
for(int i=0; i<nums.length; i++){
if(st.remove(nums[i])){
int pre = nums[i]-1, next = nums[i]+1;
while(st.remove(pre)) pre--;
while(st.remove(next)) next++;
res = Math.max(res, next - pre - 1);
}
}
return res;
}
}
参考资料:
https://www.cnblogs.com/grandyang/p/4276225.html
原文:https://www.cnblogs.com/zhengxch/p/14613274.html