在 JavaScript 中限制范围总和的计数对
范围总和
范围总和rangeSum(i,j)定义为数组中索引i和j(i≤j)之间元素的总和,包括两者。
问题
我们需要编写一个JavaScript函数,它接受一个整数数组arr作为第一个参数和两个数字,upper和lower作为第二个和第三个元素。
我们的函数应该返回范围[upper,lower]之间的范围总和的数量,(两者都包括在内)。
例如,如果函数的输入是-
const arr = [1, 4, 3]; const upper = 5; const lower = 2;
那么输出应该是-
const output = 3;
示例
此代码将是-
const arr = [1, 4, 3]; const upper = 5; const lower = 2; const countRangeSum = (arr = [], lower, upper) => { const sums = [0]; let res = 0; let last = 0; let firstge = value => { let l = 0, r = sums.length, m; do { m = Math.floor((r + l) / 2); sums[m] < value ? l = m : r = m; } while (r >= l + 2); while (r > 0 && sums[r - 1] >= value ) { r -= 1; } return r; }; arr.forEach(num => { last += num; res += firstge(last - lower + 1) - firstge(last - upper); sums.splice(firstge(last), 0, last); }); return res; }; console.log(countRangeSum(arr, lower, upper));输出结果
控制台中的输出将是-
3