JavaScript 中最大分区平均值总和


问题

我们需要编写一个 JavaScript 函数,此函数的第一个参数是数字数组 arr,第二个参数是数字 num,且 (num <= arr 的大小)。

我们的函数应将数组 arr 分成至多 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

更新于: 24-4-2021

81 次浏览

启动你的 职业

通过完成课程获得认证

开始
广告