정렬된 정수 배열이 주어졌다고 가정하고 이를 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