跳到主要内容

2028.找出缺失的观测数据

链接:2028.找出缺失的观测数据
难度:Medium
标签:数组、数学、模拟
简介:返回一个长度为 n 的数组,包含所有缺失的观测数据,且满足这 n + m 次投掷的 平均值 是 mean 。如果存在多组符合要求的答案,只需要返回其中任意一组即可。如果不存在答案,返回一个空数组。

题解 1 - cpp

  • 编辑时间:2022-03-27
  • 执行用时:112ms
  • 内存消耗:120.7MB
  • 编程语言:cpp
  • 解法介绍:找到平均值进行分摊。
class Solution {
public:
vector<int> missingRolls(vector<int>& rolls, int mean, int n) {
int sum = (n + rolls.size()) * mean;
vector<int> ans;
for (auto& roll : rolls) sum -= roll;
if (n * 6 < sum || n > sum) return ans;
int avg = sum / n, surplus = sum - (n - 1) * avg;
for (int i = 0; i < n - 1; i++) {
int num = avg;
if (surplus > 6) {
num++;
surplus--;
}
ans.push_back(num);
sum -= num;
}
ans.push_back(sum);
return ans;
}
};

题解 2 - python

  • 编辑时间:2024-05-27
  • 执行用时:89ms
  • 内存消耗:20.9MB
  • 编程语言:python
  • 解法介绍:模拟构造。
class Solution:
def missingRolls(self, rolls: List[int], mean: int, n: int) -> List[int]:
m = len(rolls)
nsum = (m + n) * mean
ssum = nsum - sum(rolls)
if ssum / n > 6 or ssum < n: return []
res = [ssum // n] * n
for i in range(ssum % n): res[i] += 1
return res