classSolution {publicintlongestConsecutive(int[] nums) {Set<Integer> set =newHashSet<Integer>();int ans =0;for (int num : nums) {set.add(num); }for(int i =0;i <nums.length; i ++) {int x = nums[i];// 说明x是连续序列的开头元素if (!set.contains(x -1)) {while(set.contains(x +1)) { x ++; } } ans =Math.max(ans, x - nums[i] +1); }return ans; }}
Python Code:
classSolution:deflongestConsecutive(self,A: List[int]) ->int: seen =set(A) ans =0for a in A: t = a# 说明 t 是连续序列的开头元素。加这个条件相当于剪枝的作用,否则时间复杂度会退化到 N ^ 2if t +1notin seen:while t -1in seen: t -=1 ans =max(ans, a - t +1)return ans
JS Code:
/** * @param{number[]} nums * @return{number} */varlongestConsecutive=function (nums) { set =newSet(nums);let max =0;let temp =0;set.forEach((x) => {// 说明x是连续序列的开头元素。加这个条件相当于剪枝的作用,否则时间复杂度会退化到 N ^ 2if (!set.has(x -1)) { temp = x +1;while (set.has(y)) { temp = temp +1; } max =Math.max(max, y - x); // y - x 就是从x开始到最后有多少连续的数字 } });return max;};