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

数组连续相同值检测及JavaScript代码逻辑错误修复求助

问题解决:数组连续重复元素检测与重排错误修复

核心问题分析

原函数的第一个for循环逻辑完全颠倒:

  • 当前逻辑:只要发现任意一对相邻元素不相等,就直接返回"There are no identical consecutive values",终止检测。这导致只要数组里存在不相邻的元素,就直接判定没有连续重复,完全违背了“遍历全数组,检查是否存在至少一组连续重复元素”的需求。
  • 第二个for循环存在边界问题:当i遍历到数组最后一个元素时,arr[i+1]为undefined,会错误地将最后一个元素判定为不重复并推入栈中,但实际上此时没有下一个元素可用于比较。

修正后的代码

function noIdenticalConsecutives(arr) {
  let stack = new Stack();
  let repeat = [];

  if (arr.length === 0) return "No values to iterate";

  // 修正:遍历全数组检测是否存在连续重复元素
  let hasConsecutiveDuplicates = false;
  for (let i = 0; i < arr.length - 1; i++) {
    if (arr[i] === arr[i + 1]) {
      hasConsecutiveDuplicates = true;
      break; // 只要发现一组就可以停止检测,提升效率
    }
  }

  // 如果没有连续重复,直接返回提示
  if (!hasConsecutiveDuplicates) {
    return "There are no identical consecutive values";
  }

  // 修正:正确收集重复元素与非重复元素,处理边界问题
  for (let i = 0; i < arr.length; i++) {
    // 只在不是最后一个元素且与下一个元素相等时,收集重复项
    if (i < arr.length - 1 && arr[i] === arr[i + 1]) {
      repeat.push(arr[i]);
    } else {
      stack.push(arr[i]);
    }
  }

  // 将重复元素插入栈的合适位置,避免再次出现相邻重复
  // 遍历栈寻找可以插入的位置,确保插入后无相邻相同元素
  for (const element of repeat) {
    let inserted = false;
    for (let j = 0; j < stack.length; j++) {
      if (j === 0 && stack[j] !== element) {
        stack.insert(j, element);
        inserted = true;
        break;
      } else if (j > 0 && stack[j-1] !== element && stack[j] !== element) {
        stack.insert(j, element);
        inserted = true;
        break;
      }
    }
    // 如果所有位置都相邻重复,就放到末尾(兜底处理)
    if (!inserted) {
      stack.push(element);
    }
  }

  return stack;
}

// 测试调用
console.log(noIdenticalConsecutives([14, 4, 10, 7, 3, 1, 1, 5, 7, 7]));

关键改动说明

  1. 连续重复检测逻辑修正:

    • 新增hasConsecutiveDuplicates标记,遍历数组时只要发现一组连续相等元素就标记为true,并可提前终止遍历。
    • 遍历完成后,根据标记决定是否进入后续处理流程,而非中途错误返回。
  2. 边界问题修复:

    • 在收集重复元素时,增加i < arr.length - 1的判断,避免访问数组越界的undefined值。
  3. 重复元素重排优化:

    • 原代码只是将重复元素堆到栈末尾,可能导致新的相邻重复(比如栈末尾元素和重复元素相同)。修正后改为遍历栈,寻找不与前后元素重复的位置插入,确保最终数组无相邻相同元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:30:58