1、题目
2、实现
(1)思路
- 将数组去重
- 遍历数组,当数组中存在num-1时,跳过,不进行查询;
P.S. 评论区还有人说可以用“并查集”方法来做,但是我不会,也没有进一步研究,不过我找了一下并查集的视频,放在了参考部分。
(2)代码
/**
* @param {number[]} nums
* @return {number}
*/
var longestConsecutive = function(nums) {
let num_set = new Set();
// 对nums去重
for(let num of nums) {
num_set.add(num);
}
// 记录数字连续的最长序列长度
let maxStreak = 0;
// 遍历哈希表
for(let num of num_set) {
// 判断是否num的前序元素num-1是否在数组中,如果在,则跳过(说明目前不是最优的结果)
// 如果不在,即从当前num开始找序列
if(num_set.has(num - 1) === false) {
let currNum = num;
let currStreak = 1;
// 继续找序列
while(num_set.has(currNum + 1)) {
currNum += 1;
currStreak +=1;
}
// 选取序列长度最长的
maxStreak = Math.max(maxStreak, currStreak);
}
}
return maxStreak;
};
3、参考