เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลขเป็นอาร์กิวเมนต์แรกและตัวเลขเดียวเป็นอาร์กิวเมนต์ที่สอง ฟังก์ชันควรเลือกสามตัวเลขดังกล่าวจากอาร์เรย์ (ถ้ามี) ซึ่งมีผลรวมเท่ากับตัวเลขที่ระบุโดยอาร์กิวเมนต์ที่สอง
ในที่สุด ฟังก์ชันควรส่งคืนอาร์เรย์ของอาร์เรย์ของ triplets ดังกล่าวทั้งหมด หากมีอยู่ มิฉะนั้นจะเป็นค่าว่าง
ตัวอย่างเช่น −
หากอาร์เรย์อินพุตและตัวเลขเป็น −
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 -- // making sure
our solution set does not contain duplicate res
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 ] ]