LeetCode热题100- 最长连续序列【JavaScript讲解】

题目:

在这里插入图片描述

解题思路:

  1. 去重‌;
  2. 遍历去重后的集合‌,对于每一个元素x,我们尝试以它作为连续序列的起点;
  3. 判断是否为连续序列的起点;
  4. 如果x是连续序列的起点,我们从x+1开始,不断检查numset中是否包含y(初始时y=x+1),如果包含,则y自增,继续检查下一个数。这个过程会一直持续到numset中不包含y为止。
  5. 更新最长连续序列的长度‌;

代码实现:

var longestConsecutive = function(nums) {
  // 使用Set去重
  let numset = new Set(nums);
  let ans = 0; // 最长连续序列的长度

  // 遍历去重后的集合
  for (let x of numset) {
    // 如果集合中包含x-1,则x不是连续序列的起点
    if (numset.has(x - 1)) {
      continue;
    }

    let y = x + 1;
    // 寻找连续序列的终点
    while (numset.has(y)) {
      y++;
    }

    // 更新最长连续序列的长度
    ans = Math.max(ans, y - x);
  }

  // 返回最长连续序列的长度
  return ans;
};

复杂度分析:

  • 时间复杂度‌:由于我们使用了Set来去重,并且对每个元素只进行了一次遍历和连续的查找,所以时间复杂度为O(n),其中n是数组nums的长度。‌
  • 空间复杂度‌:我们使用了一个Set来存储去重后的元素,所以空间复杂度也是O(n)。

通过:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值