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。这使得奇数长度数组减一。
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