力扣每日一题(难的我也不会)2028. 找出缺失的观测数据(2022.3.27)
现有一份 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;
}
}
下午网易笔试,冲冲冲