Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tối thiểu hóa tổng giá trị tuyệt đối trong JavaScript


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