题目来源:https://leetcode-cn.com/problems/find-missing-observations/
大致题意:
给一个长度为 m 的数组,一个整数 n,以及平均值 mean
要求返回一个长度为 n 的数组,该数组与给定数组的平均值为 mean,且数组元素不能大于 6
思路
- 求出长度为 n 的数组的数组和 sum
- 将 sum 除以 n 得到商值 base,sum 对 n 取余得到余数 rest
- 所求数组即由 rest 个 base + 1,以及 n - rest 个 base 组成
代码:
class Solution {
public int[] missingRolls(int[] rolls, int mean, int n) {
int sum = mean * (rolls.length + n);
int mSum = Arrays.stream(rolls).sum();
int nSum = sum - mSum;
// 商
int nMean = nSum / n;
// 余数
int nRest = nSum % n;
// 若有元素值大于 6
// 或是元素值小于 1
// 表示没有满足条件的数组,返回空数组
if (nMean + (nRest == 0 ? 0 : 1) > 6 || nSum <= 0 || nMean == 0) {
return new int[0];
}
int[] nRolls = new int[n];
Arrays.fill(nRolls, nMean);
for (int i = 0; i < nRest; i++) {
nRolls[i]++;
}
return nRolls;
}
}