เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ตัวเลขเป็นอาร์กิวเมนต์แรก และตัวเลขเดี่ยวเป็นอาร์กิวเมนต์ที่สอง ฟังก์ชันต้องเลือกสามตัวเลขจากอาร์เรย์ (ถ้ามี) ที่ผลรวมเท่ากับตัวเลขอาร์กิวเมนต์ที่สอง
ฟังก์ชันต้องคืนอาร์เรย์ของอาร์เรย์ของทริปเล็ตทั้งหมดที่ตรงเงื่อนไข อาร์เรย์ว่างถ้าไม่มี
ตัวอย่าง
ถ้าอาร์เรย์และตัวเลขนำเข้าคือ:
const arr = [2, 5, 7, 8, 9, 11, 1, 6]; const sum = 22;
ผลลัพธ์ควรเป็น:
const output = [[2, 9, 11], [5, 6, 11], [5, 8, 9], [6, 7, 9]];
ตัวอย่างโค้ด
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;
let 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 if(curr > sum) {
right--;
}
}
}
}
return res;
};
console.log(threeSum(arr, sum));
ผลลัพธ์
[[2, 9, 11], [5, 6, 11], [5, 8, 9], [6, 7, 9]]