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

Tách mảng số thành hai mảng có cùng mức trung bình trong JavaScript

Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng các số nguyên làm đối số đầu tiên và duy nhất.

Hàm cần xác định xem có tồn tại sự kết hợp các phần tử của mảng đầu vào mà khi chúng được chia thành hai nhóm (có thể / không có các phần tử bằng nhau), mức trung bình của cả hai nhóm là như nhau. Nếu tồn tại bất kỳ điều kiện nào như vậy, các hàm phải trả về true, ngược lại là false.

Ví dụ -

Nếu mảng đầu vào là -

const arr = [6, 3, 2, 8, 1, 5, 7, 4];

Sau đó, kết quả đầu ra phải là -

const output = true;

bởi vì kết hợp là [8, 1, 5, 4] và [6, 3, 2, 7] vì cả hai nhóm đều có mức trung bình là 4,5

Ví dụ

Sau đây là mã -

const arr = [6, 3, 2, 8, 1, 5, 7, 4];
const canHaveEqualAveragePartition = (arr = []) => {
   const sum = arr.reduce((acc, val) => acc + val);
   const array = Array(sum+1).fill(false).map(() =>
   Array(arr.length+1).fill(false));
   array[0][0] = true;
   for(let i=0; i < arr.length; ++i){
      for(let j=sum - arr[i];j>=0;--j){
         for(let k=arr.length-2;k>=0;--k){
            if(array[j][k]){
               array[j + arr[i]][k+1] = true;
               if((j + arr[i]) * (arr.length - k - 1) == (sum - j -arr[i]) * (k + 1)){
                  return true;
               }
            }
         }
      }
   }
   return false;
};
console.log(canHaveEqualAveragePartition(arr));

Đầu ra

Sau đây là đầu ra của bảng điều khiển -

true