Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การหาสามสมาชิกที่ผลรวมเท่ากับค่าที่กำหนดในอาร์เรย์ด้วย JavaScript

เราต้องเขียนฟังก์ชัน 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]]