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

หาคู่ติดกันที่ผลรวมใกล้ศูนย์สุด - JavaScript

หาคู่เอลีเมนต์ติดกัน (Adjacent Pair) ในอาร์เรย์ ที่ผลรวมมีค่าสัมบูรณ์น้อยที่สุด (ใกล้ 0 มากที่สุด)

ตัวอย่าง

[4, 4, 12, 3, 3, 1, 5, -4, 2, 2]
Pairs: (4,4)=8, (4,12)=16, (12,3)=15, (3,3)=6, (3,1)=4, (1,5)=6, (5,-4)=1, (-4,2)=-2, (2,2)=4
Closest to 0: (5, -4) = 1

ตัวอย่างโค้ด

const closestElements = (arr, target = 0) => {
  if (arr.length <= 2) return arr;
  
  const { startIndex } = arr.reduce((acc, val, i) => {
    const next = arr[i + 1];
    if (!next) return acc;
    
    const diff = Math.abs(target - (val + next));
    if (diff < acc.closest) {
      return { closest: diff, startIndex: i };
    }
    return acc;
  }, { closest: Infinity, startIndex: -1 });
  
  return [arr[startIndex], arr[startIndex + 1]];
};

console.log(closestElements([4, 4, 12, 3, 3, 1, 5, -4, 2, 2], 0));

ผลลัพธ์

[5, -4]

เวอร์ชัน Simple Loop

const closestElements = (arr, target = 0) => {
  if (arr.length < 2) return arr;
  
  let minDiff = Infinity, bestPair = [];
  for (let i = 0; i < arr.length - 1; i++) {
    const diff = Math.abs(arr[i] + arr[i+1] - target);
    if (diff < minDiff) {
      minDiff = diff;
      bestPair = [arr[i], arr[i+1]];
    }
  }
  return bestPair;
};