找出缺失的观测数据
难度:中等
纯纯的数学题,题目不难,注意细节的处理。
1、通过平均数mean * (rolls的长度 + n)得到所有数据的总和,遍历已经存在的数据依次减去,得到缺失的观测数据的总和。
2、现在我们有了总和 cnt 、缺失的数据个数n,首先判断数据是否合法,那么需要满足条件
1、cnt > n (每个数据最小值为1)
2、cnt < 6n (每个数据最大值为6)
若上述条件满足,我们只需要将cnt平均分到每个数据即可。
代码如下:
public int[] missingRolls(int[] rolls, int mean, int n) {
int len = rolls.length;
int cnt = (len+n) * mean;
for (int roll : rolls) {
cnt -= roll;
}
int[] res = new int[n];
if (cnt > 6*n || cnt < n){
return new int[0];
}
for (int i = 0; i < n; i++) {
res[i] = cnt/(n-i);
cnt -= res[i];
}
if (cnt%n != 0){
res[n-1] = cnt;
}
return res;
}
执行结果:成功