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)时的计算过程:
- 索引0:除数为1,8/1=8,x=8不在[1,3]区间 → false
- 索引1:除数为2,5不能被2整除 → false
- 索引2:除数为3,6/3=2,x=2在[1,3]区间 → true
- 索引3:除数为4,16/4=4,x=4不在[1,3]区间 → false
- 索引4:除数为5,5/5=1,x=1在[1,3]区间 → true
最终输出[false, false, true, false, true],完全符合要求。
内容的提问来源于stack exchange,提问作者mohammad mussab
相关产品推荐
相关产品推荐

