Giả sử, chúng ta được cho một mảng số nguyên đã sắp xếp, gọi là arr. Chúng ta cần tìm một số nguyên x sao cho giá trị của:
abs(a[0] - x) + abs(a[1] - x) + ... + abs(a[a.length - 1] - x)
là nhỏ nhất có thể (abs là giá trị tuyệt đối). Nếu có nhiều câu trả lời khả thi, hãy đưa ra số nhỏ nhất.
Ví dụ - Với arr = [2, 4, 7], đầu ra nên là 4 vì abs(2-4)+abs(4-4)+abs(7-4)=5 là nhỏ nhất đạt được.
Chúng ta biết arr.length/2 trả về nửa độ dài. Đối với mảng chẵn, đây là bên phải giữa. Đối với mảng lẻ, đó là giữa. Math.ceil(arr.length/2)-1 sửa lỗi off-by-one cho tất cả mảng.
Ví dụ
Code sau đây:
const arr = [2, 4, 7];
const absoluteValuesSumMinimization = (arr = []) => {
const res = [];
arr.forEach(num => {
const sum = arr.reduce((accum, next) => accum + Math.abs(next - num), 0);
res.push(sum);
});
const lowest = Math.min(...res);
return arr[res.indexOf(lowest)];
};
console.log(absoluteValuesSumMinimization(arr));Kết quả
Kết quả trên console:
4