📅  最后修改于: 2023-12-03 15:27:11.540000             🧑  作者: Mango
本程序用于寻找一个数组中所有总和为给定值的三元组。该程序采用了双指针的方法,使得时间复杂度为O(n^2),空间复杂度为O(1)。
function findTriplets(arr, target) {
const result = [];
// 数组排序
arr.sort((a, b) => a - b);
// 双指针遍历数组
for (let i = 0; i < arr.length - 2; i++) {
let left = i + 1;
let right = arr.length - 1;
// 寻找三元组
while (left < right) {
const sum = arr[i] + arr[left] + arr[right];
if (sum === target) {
result.push([arr[i], arr[left], arr[right]]);
left++;
right--;
} else if (sum < target) {
left++;
} else {
right--;
}
}
}
return result;
}
调用该函数即可寻找数组中所有总和为目标值的三元组:
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const target = 10;
const triplets = findTriplets(arr, target);
console.log(triplets); // [ [1, 2, 7], [1, 3, 6], [1, 4, 5], [2, 3, 5] ]
本程序采用了双指针的方法,使得时间复杂度为O(n^2),空间复杂度为O(1)。在实际应用中,可以用于寻找一个大数组中所有总和为给定值的三元组,如寻找数组中所有唯一三元组的下标。