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

Tổng trung bình lớn nhất của các phân vùng trong JavaScript

Vấn đề

Chúng tôi bắt buộc phải 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, (num <=size of arr), làm đối số thứ hai.

Hàm của chúng ta nên phân vùng arr mảng thành nhiều nhất num nhóm liền kề (không trống) theo cách mà chúng ta không để lại phần tử nào.

Từ tất cả các phân vùng như vậy, hàm của chúng ta sẽ chọn phân vùng đó ở đó tổng giá trị trung bình của tất cả các nhóm là lớn nhất.

Và cuối cùng, chúng ta nên trả lại số tiền lớn nhất này.

Ví dụ:nếu đầu vào của hàm là

Đầu vào

const arr = [10, 2, 3, 4, 10];
const num = 3;

Đầu ra

const output = 23;

Giải thích đầu ra

Bởi vì nếu chúng ta phân vùng mảng như thế này -

[10], [2, 3, 4], [10]

Tổng số trung bình sẽ là -

10 + (9)/3 + 10 = 23

Phân vùng nào là phân vùng lớn nhất trong số tất cả các phân vùng.

Ví dụ

Sau đây là mã -

const arr = [10, 2, 3, 4, 10];
const num = 3;
const greatestSum = (arr, num) => {
   const sum = (arr = []) => arr.reduce((acc, num) => acc + num, 0)
   let matrix = new Array(num + 1).fill(0).map(() => new Array(arr.length + 1).fill(0))
   for (let index = arr.length; index >= 0; index--) {
      const current = new Array(num + 1).fill(0).map(() => new Array(arr.length +    1).fill(0))
      for (let currentK = num; currentK >= 0; currentK--) {
         for (let count = arr.length - 1; count >= 0; count--) {

            if (index === arr.length && currentK === num) {
               current[currentK][count] = 0
            } else if (index < arr.length && currentK < num) {
               current[currentK][count] = Math.max(
               matrix[currentK][count + 1],matrix[currentK + 1][0] + sum(arr.slice(index - count, index + 1)) / (count + 1) )
            } else {
               current[currentK][count] = -Infinity
            }
         }
      }
      matrix = current
   }
   return matrix[0][0]
}
console.log(greatestSum(arr, num));

Đầu ra

23