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

Mảng có thể được chia thành n phân vùng với tổng bằng nhau trong JavaScript

Chúng tôi được yêu cầu viết một hàm JavaScript nhận một mảng số, arr, làm đối số đầu tiên và một số, num, làm đối số thứ hai.

Hàm sẽ xác định xem có tồn tại cách phân phối các phần tử của mảng arr thành các nhóm num sao cho tất cả các nhóm có tổng bằng nhau hay không. Nếu tồn tại bất kỳ cách nào như vậy, hàm của chúng ta sẽ trả về true, ngược lại là false.

Ví dụ -

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

const arr = [4, 6, 3, 3, 7, 4, 1];
const num = 4;

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

const output = true;

bởi vì bốn nhóm là:[7], [1, 6], [4, 3], [4, 3]

Ví dụ

Mã cho điều này sẽ là -

const arr = [4, 6, 3, 3, 7, 4, 1];
const num = 4;
const canDivide = (arr = [], num = 1) => {
   const sum = arr.reduce((acc, num) => acc + num);
   if (sum % num !== 0 || arr.some(num => num > sum / num)) {
      return false;
   }
   const used = new Set();
   return (function find(start, target) {
      if (used.size === arr.length) {
         return true;
      }
      if (target < 0) {
         return false;
      }
      if (target === 0) {
         return find(0, sum / num);
      }
      for (let i = start; i < arr.length; i++) {
         if (!used.has(i)) {
            used.add(i);
            if (find(i + 1, target - arr[i])) {
               return true;
            }
            used.delete(i);
         }
      }
      return false;
   })(0, sum / num);
};
console.log(canDivide(arr,num));

Các bước chúng tôi đã thực hiện trong giải pháp của mình là -

  • Bước 1. Nếu tổng không thể chia cho num hoặc một trong số lớn hơn sum / num, chúng tôi trả về false.

  • Bước 2:Chúng tôi đã sử dụng HashSet để theo dõi các số đã sử dụng.

  • Bước 3. Chúng tôi bắt đầu tìm các phân vùng phụ.

  • Nếu tất cả các số được sử dụng, chúng tôi đã hoàn tất.

  • Nếu tổng tập hợp con quá lớn, chúng tôi đã ngừng tìm kiếm.

  • Nếu chúng tôi đã tìm thấy một tập hợp con, chúng tôi tiếp tục tìm kiếm cho đến khi chúng tôi sử dụng tất cả các số.

  • Và cuối cùng, chúng tôi đã thử mọi số chưa sử dụng.

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

true