给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
class Solution { public int longestConsecutive(int[] nums) { Set<Integer> numset = new HashSet<>(); for(int num : nums){ numset.add(num); } int res = 0; int count = 0; for(int num : nums){ int tem = num; if(!numset.contains(tem - 1)){ //当前数为序列的开始 count = 1; //每个数字最多被访问两次 98765,5先进入循环被访问,然后6,7,8,9各一次。加上外层的for一次,共2次。 //contains —— O(1) while(numset.contains(tem + 1)){ count++; tem++; } res = Math.max(res,count); } } return res; } }