Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript의 절대값 합 최소화

<시간/>

정렬된 정수 배열이 주어졌다고 가정하고 이를 arr이라고 합시다. −

의 값이 되는 정수 x를 찾아야 합니다.
abs(a[0] - x) + abs(a[1] - x) + ... + abs(a[a.length - 1] - x)

가능한 가장 작습니다(여기서 abs는 절대값을 나타냄). 가능한 답이 여러 개일 경우 가장 작은 답을 출력하세요.

예:

를 위해

arr = [2, 4, 7],

출력은 -

여야 합니다.
absoluteValuesSumMinimization(arr) = 4

abs(2 - 4) + abs(4 - 4) + abs(7 - 4) =5이므로 어떤 숫자로도 달성할 수 있는 가장 작은 값입니다.

우리는 알고 있습니다.

arr.length/2

길이의 절반을 반환합니다.

짝수 길이 배열의 경우 중앙 오른쪽에 있습니다. 홀수 길이 배열의 경우 중간이 됩니다.

  • Math.ceil(arr.length/2)은 필요한 경우 반올림하므로 5 배열의 중간은 2.5 -> 3이 됩니다. 이렇게 하면 홀수 길이 배열이 1만큼 줄어듭니다.

  • Math.ceil(arr.length/2)-1은 한 인덱스 아래로 이동합니다. 이렇게 하면 모든 어레이에 대해 하나씩 오류가 수정됩니다.

예시

다음은 코드입니다 -

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));

출력

다음은 콘솔의 출력입니다 -

4