JavaScript中的非负集减法

我们有一组整数,并且需要从该组的总和中减去一个值。

像这儿,

[4, 5, 6, 7, 8] − 25

如果我们从每个数字中平均减去,我们将得到-

[−1, 0, 1, 2, 3]

但是,我们不希望任何数字小于0。

因此,如果我们正在编写算法来执行此操作,则负数将相等地溢出到剩余数中,现在我们将有-

[0, 0, 1, 2, 3] − 1

进行结果集-

[0, 0, 1 − 0.333, 2 − 0.333, 3 − 0.333]

请注意,这正是我们想要的结果。

所有的负值甚至会溢出到其余的正值中。

我们需要编写一个JavaScript函数,该函数将数字数组作为第一个参数,将总和作为第二个参数。

然后,该函数应计算均匀减去并分配的数组并将其返回。

示例

为此的代码将是-

const arr = [4, 5, 6, 7, 8];
const subtract = (arr, sum) => {
   return arr.map((el, index, array) => {
      const rem = array.length − index
      const avg = sum / rem;
      const toSubtract = Math.min(avg, el);
      sum −= toSubtract;
      return el − toSubtract;
   });
};
console.log(subtract(arr, 25));

输出结果

控制台中的输出将是-

[ 0, 0, 0.666666666666667, 1.666666666666666, 2.666666666666666 ]