Computer >> Máy Tính >  >> Lập trình >> Javascript

Giảm thiểu tổng giá trị tuyệt đối trong JavaScript

Giả sử, chúng ta được cung cấp một mảng các số nguyên đã được sắp xếp, chúng ta hãy gọi nó là arr. Chúng tôi bắt buộc phải 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ể (ở đây abs biểu thị giá trị tuyệt đối). Nếu có một số câu trả lời có thể, hãy xuất câu trả lời nhỏ nhất.

Ví dụ -

Đối với,

arr = [2, 4, 7],

đầu ra phải là -

absoluteValuesSumMinimization(arr) = 4

bởi vì cơ bụng (2 - 4) + cơ bụng (4 - 4) + cơ bụng (7 - 4) =5 là số nhỏ nhất mà chúng ta có thể đạt được với bất kỳ số nào.

Chúng tôi biết rằng,

arr.length/2

trả về một nửa chiều dài.

Đối với các mảng có độ dài chẵn, phần này sẽ nằm ở bên phải của phần giữa. Đối với các mảng có độ dài lẻ, nó sẽ là giữa.

  • Math.ceil (arr.length / 2) làm tròn lên nếu cần thiết, vì vậy phần giữa của mảng 5 sẽ là 2,5 -> 3. Điều này làm cho các mảng có độ dài lẻ giảm đi một.

  • Math.ceil (arr.length / 2) -1 đi xuống một chỉ mục. Điều này sửa từng lỗi một cho tất cả các mảng.

Ví dụ

Sau đây là mã -

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

Đầu ra

Sau đây là kết quả trên bảng điều khiển -

4