128. 最长连续序列
题目分类哈希,但对哈希不熟悉,所以用普通方法做。
注意:sort((a, b) => a - b)为升序排列;sort((a, b) => b - a)为降序排列;
例如:
[4, 3].sort((a, b) => a - b);
// a = 3,b = 4,因为在js的sort排序中,是反着数的
// 因为a-b是负数,所以a在b前面,所以3在4前面,得到[3, 4]
var longestConsecutive = function (nums) {
nums.sort((a, b) => a - b);
let maxCount = 0;
// 因为如果1,2,3,4;满足条件:currentCount+1,
// 如果currentCount初始值为0,最终currentCount=3,所以currentCount初始值为1
let currentCount = 1;
for (let i = 1; i < nums.length; i++) {
if (nums[i] === nums[i - 1]) {
continue;
}
// 如果当前元素与前一个元素的差为1,则增加当前计数
if (nums[i] - nums[i - 1] === 1) {
currentCount++;
} else {
// 如果不连续,则重置计数器
maxCount = Math.max(maxCount, currentCount);
currentCount = 1;
}
}
if(nums.length === 0){
currentCount = 0;
}
// 检查最后一组连续序列的长度
return Math.max(maxCount, currentCount);
}
但又有疑问:
//为什么这样写排序是错的?
for(let i = 0; i < nums.length - 1; i++){
for(let j = 1; j < nums.length; j++){
// j = 1 改为 j = i + 1,即可
if(nums[i] > nums[j]){
let tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
}
// 输入:[100, 4, 200, 1, 3, 2]
// 输出:[ 4, 100, 1, 3, 2, 200 ]
!原因
内部循环应该是从i + 1开始,而不是从1开始。
(记错了冒泡排序,简直是不可原谅的错误(TT)