Computer >> Computer tutorials >  >> Programming >> Javascript

Absolute Values Sum Minimization in JavaScript


Suppose, we are given a sorted array of integers, let us call it arr. We are required to find such an integer x that the value of −

abs(a[0] - x) + abs(a[1] - x) + ... + abs(a[a.length - 1] - x)

is the smallest possible (here abs denote the absolute value). If there are several possible answers, output the smallest one.

For example −

For,

arr = [2, 4, 7],

the output should be −

absoluteValuesSumMinimization(arr) = 4

because abs(2 - 4) + abs(4 - 4) + abs(7 - 4) = 5 which is the smallest we can achieve with any number.

We know that,

arr.length/2

returns half the length.

For even-length arrays, this will be to the right of the middle. For odd-length arrays, it'll be the middle.

  • Math.ceil(arr.length/2) rounds up if necessary, so the middle of an array of 5 would be 2.5 -> 3. This makes the odd-length arrays off by one.

  • Math.ceil(arr.length/2)-1 goes down one index. This corrects off-by-one errors for all the arrays.

Example

Following is the code −

const arr = [2, 4, 7];
const absoluteValuesSumMinimization = (arr = []) => {
   const res = [];
   arr.forEach(num => {
      const sum = arr.reduce((accum, next) => {
         return accum + Math.abs(next - num);
      }, 0);
      res.push(sum);
   });
   const lowest = Math.min(...res);
   return arr[res.indexOf(lowest)];
};
console.log(absoluteValuesSumMinimization(arr));

Output

Following is the output on console −

4