Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript에서 파티션 평균의 최대 합

<시간/>

문제

첫 번째 인수로 숫자 배열 arr을, 두 번째 인수로 숫자 num(num <=arr 크기)을 취하는 JavaScript 함수를 작성해야 합니다.

우리의 함수는 배열 ar을 최대 num개의 인접한(비어 있지 않은) 그룹으로 분할하여 요소를 뒤에 남기지 않도록 해야 합니다.

이러한 모든 파티션에서 우리 함수는 모든 그룹의 평균 합계가 가장 큰 파티션을 선택해야 합니다.

마지막으로 이 최대 금액을 반환해야 합니다.

예를 들어 함수에 대한 입력이

인 경우

입력

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

출력

const output = 23;

출력 설명

왜냐하면 우리가 다음과 같이 배열을 분할한다면 -

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

평균의 합은 -

10 + (9)/3 + 10 = 23

모든 파티션 중에서 가장 큰 파티션입니다.

예시

다음은 코드입니다 -

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

출력

23