力扣每日一题(难的我也不会)2028. 找出缺失的观测数据(2022.3.27)

2028. 找出缺失的观测数据

现有一份 n + m 次投掷单个 六面 骰子的观测数据,骰子的每个面从 1 到 6 编号。观测数据中缺失了 n 份,你手上只拿到剩余 m 次投掷的数据。幸好你有之前计算过的这 n + m 次投掷数据的 平均值 。

给你一个长度为 m 的整数数组 rolls ,其中 rolls[i] 是第 i 次观测的值。同时给你两个整数 mean 和 n 。

返回一个长度为 n 的数组,包含所有缺失的观测数据,且满足这 n + m 次投掷的 平均值 是 mean 。如果存在多组符合要求的答案,只需要返回其中任意一组即可。如果不存在答案,返回一个空数组。

k 个数字的 平均值 为这些数字求和后再除以 k 。

注意 mean 是一个整数,所以 n + m 次投掷的总和需要被 n + m 整除。

今天的题简单,小学数学学的可以就能过

直接模拟,计算出长度为n的数组的总和,除以n得到每个位置上的数,如果不是整除,记录下差了多少个整除,并将他们的值加一即可,最后对数据边界做一些整理

代码如下

class Solution {
    public int[] missingRolls(int[] rolls, int mean, int n) {
        int len = rolls.length;
        int msum = 0;
        for (int i = 0; i < len; i++) {
            msum = msum + rolls[i];
        }
        int nsum = (n + len) * mean - msum;
        int[] res = new int[n];
        int num = nsum / n;
        int c = num * n == nsum ? 0 : nsum - n * num;
        if (c>n||num > 6 || (c!=0&&num + 1 > 6)||num<=0) {
            return new int[]{};
        }
        for (int i = 0; i < n; i++) {
            if(i<c){
                res[i]=num+1;
            }else {
                res[i]=num;
            }
        }
        return res;
    }
}

下午网易笔试,冲冲冲