算法笔记16:找出缺失的观测数据

122 阅读1分钟

2028.找出缺失的观测数据

这道题目我又想复杂了,解法其实非常直接,就是把边界判断一下。因为有时候有的剩余次数明显是不够的,而有的时候又是多余的。边界控制好之后,只需要按照均值平均一下,然后把剩下的数分配一下就可以了。

代码如下:

const missingRolls = (rolls, mean, n) => {
    const total = mean * (n + rolls.length);
    const currSum = rolls.reduce((p, n) => p + n, 0);
    const diff = total - currSum;

    if (currSum > total || diff > n * 6 || diff < n) {
      return [];
    }

    const avg = Math.floor(diff / n);
    const res = Array(n).fill(avg);
    let lack = diff - avg * n;
  
    for (let i = 0; i < res.length; i++) {
        if (lack === 0) {
            break;
        }
        const curr = res[i];
        const maxConsume = Math.min(6 - curr, lack);
        res[i] += maxConsume;
        lack -= maxConsume;
    }

    return res;
};