function findClosestToZero(arr) {
if (arr.length < 2) {
console.log("arr must have at least two elements.");
return;
}
// Step 1: Sort the arr
let sortedArr = [...arr];
sortedArr.sort((a, b) => a - b);
let left = 0;
let right = sortedArr.length - 1;
let closestSum = Number.MAX_SAFE_INTEGER;
let closestPair = [0, 0];
// Step 2: Use two-indexed technique
while (left < right) {
let sum = sortedArr[left] + sortedArr[right];
// Update closest sum and pair if needed
if (Math.abs(sum) < Math.abs(closestSum)) {
closestSum = sum;
closestPair[0] = sortedArr[left];
closestPair[1] = sortedArr[right];
}
// Move indexeds
if (sum < 0) {
left++; // Increase sum by moving left indexed
} else {
right--; // Decrease sum by moving right indexed
}
}
// Output the result
console.log(`The two elements whose sum is closest to zero are:
${closestPair[0]} and ${closestPair[1]} with a sum of ${closestSum}.`);
}
const arr = [23, -26, -88, -42, 55, 99, -11, 90, -13, 17, -31];
findClosestToZero(arr);
/*
run:
The two elements whose sum is closest to zero are:
-88 and 90 with a sum of 2.
*/