数组最长连续相等元素序列提取问题及代码修正请求
修正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
相关产品推荐
相关产品推荐

