leetcode-128. 最长连续序列

74 阅读1分钟

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)