You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组最长连续相等元素序列提取问题及代码修正请求

修正JavaScript代码以找出数组中最长连续相等元素序列

需求说明

将数组中第一个连续相等元素序列存入currentSequence,再保存至maxSequence;后续依次将每个连续相等元素序列存入currentSequence,若其长度大于maxSequence则更新maxSequence,需保持数组原顺序。

原代码问题分析

你提供的代码无法得到预期输出,核心问题有几个:

  • 每次循环都重新初始化currentSequence,导致无法持续收集同一个连续序列的所有元素
  • 仅当arr[i] === arr[i+1]时才添加元素,既遗漏了单个元素的序列,也没法把长度≥2的连续序列完整收集
  • 没有处理数组最后一个元素所在的序列

修正后的代码

let arr = ['2','1','1','2','3','3','2','2','2','1'].map(Number);

let maxSequence = [];
let currentSequence = [];

for(let i = 0; i < arr.length; i++) {
    // 若当前序列为空,或当前元素和序列最后一个元素相等,加入当前序列
    if (currentSequence.length === 0 || arr[i] === currentSequence.at(-1)) {
        currentSequence.push(arr[i]);
    } else {
        // 当前元素不属于当前序列,先比较更新最长序列
        if (currentSequence.length > maxSequence.length) {
            maxSequence = [...currentSequence]; // 浅拷贝避免引用关联
        }
        // 重置当前序列为当前元素
        currentSequence = [arr[i]];
    }
}

// 循环结束后检查最后一个序列,避免遗漏
if (currentSequence.length > maxSequence.length) {
    maxSequence = [...currentSequence];
}

console.log(maxSequence.length); // 输出: 3
console.log(maxSequence); // 输出: [2, 2, 2]

关键修正点

  • 把currentSequence的初始化移到循环外部,保证能持续收集同一个连续序列的元素
  • 调整判断逻辑:只要当前元素属于当前连续序列(空序列或和最后一个元素相等)就加入,否则就触发序列比较和重置
  • 循环结束后额外做一次序列比较,确保最后一个连续序列不会被忽略
  • 使用扩展运算符[...currentSequence]做浅拷贝,避免后续修改currentSequence时影响maxSequence的内容

内容的提问来源于stack exchange,提问作者Zvezdi7205885

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:45:09