หาคู่เอลีเมนต์ติดกัน (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;
};