我正在尝试查找具有给定总和的相邻元素三重奏的数量。
示例:
输入arr = [1,2,3,12,1,4,9,6] sum = 6
输出= 2
([1,2,3,12,1,4,1,6])
我的代码:
function getCount(arr, sum) {
var count = 0;
var indexes = [];
for (var i = 0; i < arr.length-2; i++) {
for (var j = i + 1; j < arr.length-1; j++) {
for (var k = j + 1; k < arr.length; k++){
if ((arr[i] + arr[j] + arr[k] == sum) && indexes.includes(i) && indexes.includes(j)) {
count++;
}
}
}
}
return count;
}
getCount([1,2,3,12,3,4,9,6],19);
但这不适用于相邻元素。
答案 0 :(得分:1)
我只在这里使用一个循环/遍历:
function getCount(arr, sum) {
if (arr.length < 3) return 0;
var count = 0;
var first = arr[0];
var second = arr[1];
var third;
for (var i=2; i < arr.length; i++) {
third = arr[i];
var currSum = first + second + third;
if (currSum == sum) ++count;
first = second;
second = third;
}
return count;
}
console.log(getCount([], 3));
console.log(getCount([1, 2], 3));
console.log(getCount([1, 2, 3], 3));
console.log(getCount([1, 2, 3], 6));
console.log(getCount([1,2,3,12,3,4,9,6], 19));
此处的策略是仅向下遍历输入数组一次,并在每个步骤中跟踪当前,先前和先前的先前值。然后,我们计算这三个值的总和,并与输入的目标总和进行比较。