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

JavaScript实现整数数组指定区间有界比值布尔数组计算

问题需求

给定整数数组a和两个整数l、r,需要计算布尔数组b,规则如下:

  • 对数组的第i个元素(索引从0开始),如果存在整数x满足a[i] = (i + 1) * x,且x的取值满足l ≤ x ≤ r,则b[i] = true
  • 不符合上述条件时b[i] = false
    要求调用boundedRatio([8, 5, 6, 16, 5], 1, 3)时,输出结果为[false, false, true, false, true]。
原有代码错误点

原有问题代码如下:

function boundedRatio(a, l, r) {
  let b = []
  for (let i = l; i <= r; i++) {
    //  
    for (let j = 0; j < a.length; j++) {
      let result = (j + 1) * i

      if ((j + 1) * i === a[j] && l <= i <= r) {
        b.push(true)
      } else {
        b.push(false)
      }

    }
  }

  return b
}

存在的问题:

  • 循环逻辑顺序错误:外层遍历x的取值范围,内层遍历数组元素,每次x遍历都会给b数组追加一整轮和a长度相同的布尔值,最终返回的数组长度是(r-l+1)*a.length,和预期的a.length长度完全不符
  • 判定逻辑冗余:l <= i <= r的判断没有意义,外层循环的i本身就是在[l, r]区间内遍历的
  • 没有实现「存在任意一个x符合条件就标记为true」的逻辑:每个索引位置只需要一个布尔结果,不需要对应每个x都生成结果
修正后代码
function boundedRatio(a, l, r) {
  const b = []
  // 遍历数组每一个元素
  for (let j = 0; j < a.length; j++) {
    const divisor = j + 1
    // 元素不能被除数整除时,不存在对应的整数x,直接为false
    if (a[j] % divisor !== 0) {
      b.push(false)
      continue
    }
    const x = a[j] / divisor
    // 判断x是否落在指定区间
    b.push(x >= l && x <= r)
  }
  return b
}
效果验证

调用boundedRatio([8, 5, 6, 16, 5], 1, 3)时的计算过程:

  1. 索引0:除数为1,8/1=8,x=8不在[1,3]区间 → false
  2. 索引1:除数为2,5不能被2整除 → false
  3. 索引2:除数为3,6/3=2,x=2在[1,3]区间 → true
  4. 索引3:除数为4,16/4=4,x=4不在[1,3]区间 → false
  5. 索引4:除数为5,5/5=1,x=1在[1,3]区间 → true
    最终输出[false, false, true, false, true],完全符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:45:05