力扣热题100p128最长连续序列
下面是解法,只在存在的连续序列的最大数,才查询此连续序列的个数,别的直接跳过。比如(1,2,3,4)这一组分散在数组各个位置的数字,只在4的位置查询个数,在1,2,3的位置的时候都直接跳过。
如何实现这一点呢,遍历数组,遍历到那个数据(假如是x)的时候,检查x+1是否存在,如果存在,说明如果他是一个比较长的序列的一员的话,他不是最大的,我们直接跳过它,因为我们只在序列最大值的时候去查询连续序列的个数。如果x+1不存在,说明其就是最大的,进行查询。、
如何查询数组中连续序列的个数呢?前面我们确定了一个连续序列的最大值,那么我们只需要确定x-1是否存在,就可以了,然后计数,循环,直到x-1不存在。
为什么只在最大的数字进行查询呢?序列中的任意一个数字,我们对他进行左右两边的查询,都可以找到这个序列的长度,但是,会做很多无用功,这些无用功会让时间复杂度涨到O(n2),就不满足题目要求了。
class Solution {public int longestConsecutive(int[] nums) {Set<Integer> set = new HashSet<>();for (int num : nums) {set.add(num);}int longestNum=0;for (int num : set) {if (!set.contains(num +1)) {int currentNum=1;int current=num;while (set.contains(current-1)){current=current-1;currentNum+=1;}if (currentNum>longestNum){longestNum=currentNum;}}}return longestNum;}
}