Viết hàm tìm tất cả bộ ba số trong mảng có tổng bằng giá trị cho trước. Trả về mảng các bộ ba (không trùng lặp).
Ví dụ: arr=[2,5,7,8,9,11,1,6], sum=22 → [[2,9,11],[5,6,11],[5,8,9],[6,7,9]].
Ví dụ
const arr = [2, 5, 7, 8, 9, 11, 1, 6];
const sum = 22;
const threeSum = (arr = [], sum) => {
arr.sort((a, b) => a - b);
const res = [];
for (let i = 0; i < arr.length - 2; i++) {
if (arr[i] != arr[i-1]) {
let left = i + 1, right = arr.length - 1;
while (left < right) {
const curr = arr[i] + arr[left] + arr[right];
if (curr === sum) {
res.push([arr[i], arr[left], arr[right]]);
while (arr[left] == arr[left + 1]) left++;
while (arr[right] == arr[right - 1]) right--;
left++; right--;
} else if (curr < sum) left++;
else right--;
}
}
}
return res;
};
console.log(threeSum(arr, sum));
Kết quả
[[2, 9, 11], [5, 6, 11], [5, 8, 9], [6, 7, 9]]