Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

ค่าสัมบูรณ์การย่อขนาดย่อเล็กสุดใน JavaScript


สมมติว่าเราได้รับอาร์เรย์ของจำนวนเต็มเรียงลำดับแล้ว ให้เราเรียกมันว่า arr เราจำเป็นต้องหาจำนวนเต็ม x ที่ค่าของ −

abs(a[0] - x) + abs(a[1] - x) + ... + abs(a[a.length - 1] - x)

น้อยที่สุดเท่าที่จะเป็นไปได้ (ในที่นี้หมายถึงค่าสัมบูรณ์) หากมีคำตอบที่เป็นไปได้หลายคำตอบ ให้ส่งออกคำตอบที่น้อยที่สุด

ตัวอย่างเช่น −

สำหรับ

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