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

排查JavaScript数组中2的幂元素索引提取算法的逻辑缺陷

问题分析与修复

你的代码核心缺陷是直接跳过了所有奇数,但1是奇数同时也是2的幂(2⁰),所以被错误排除了。

缺陷拆解

原代码中这一行直接跳过所有奇数:

if (arr[i] % 2 !== 0) continue;

这导致测试用例里索引0的1被直接跳过,而它本应被纳入结果数组。

修复方案

这里提供两种可行的修正方式:

方案1:兼容原逻辑,补上1的特殊判断

保留你原本的除法验证逻辑,先单独处理1的情况,再过滤非1的奇数:

function secondPower(arr) {
  let powers = [];
  let x;

  for (let i = 0; i < arr.length; i++) {
    const num = arr[i];
    // 1是2^0,属于2的幂
    if (num === 1) {
      powers.push(i);
      continue;
    }
    // 非1的奇数直接跳过
    if (num % 2 !== 0) continue;

    x = num;
    do {
      x = x / 2;
    } while (x % 2 === 0);

    if (x === 1) powers.push(i);
  }
  return powers;
}

方案2:用位运算高效判断2的幂

2的幂(大于0的正整数)有个特性:num & (num - 1) === 0,这个方法更简洁高效,同时天然兼容1的情况:

function secondPower(arr) {
  let powers = [];
  for (let i = 0; i < arr.length; i++) {
    const num = arr[i];
    // 2的幂需满足:大于0,且按位与自身减1结果为0
    if (num > 0 && (num & (num - 1)) === 0) {
      powers.push(i);
    }
  }
  return powers;
}

测试验证

运行测试用例secondPower([1,2,3,4,5,6,7,8,9,10]),两种方案都会返回预期结果:[0, 1, 3, 7],符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:20:48