使用 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP