128. 最长连续序列
「题目:」
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
「示例:」
输入:nums = [100,4,200,1,3,2],输出:4。
「第一种解题思路:」
对 nums 进行排序预处理,遍历 nums 的过程中,注意判断相邻元素是否相等,来过滤重复元素。
然后,在遍历的过程中不断比较当前连续序列的长度,即可得到最优解。
时间复杂度:O(nlogn),空间复杂度:O(logn)。
const longestConsecutive = function(nums) {
if (nums.length === 0) {
return 0;
}
nums.sort((a, b) => a - b);
let ans = 1;
let pre = nums[0];
let current = 1;
for (let i = 1; i < nums.length; i++) {
if (nums[i] === nums[i - 1]) {
continue;
}
if (nums[i] - pre === 1) {
current++;
ans = Math.max(ans, current);
} else {
current = 1;
}
pre = nums[i];
}
return ans;
};
「第二种解题思路:」
先通过哈希表对 nums 进行去重预处理。
然后,遍历哈希表,以当前元素为连续序列的起点,搜索其最大的长度,但是这样实现的时间复杂度为 O(n^2)。
对于每一个连续序列,其实只需要对它的起点元素进行搜索即可,这样整体的时间复杂度