Loading... > https://leetcode.cn/problems/find-missing-observations/description/?envType=daily-question&envId=2024-05-02 有平均值 `mean` 和缺失的数的个数 `n` ,可以通过已知的数 `rolls` 计算出缺失数的总和 `sum` ,易知 $sum = mean \times (m + n) - \sum_{i = 1}^{m} rolls[i]$ 。 因为骰子只能为 $1 \sim 6$ ,所以如果 $sum < n$ 或 $sum > 6 \times n$ ,则题目无解。 因为任意解答都可以,所以可以先将每个数都预设为 $\lfloor sum / n \rfloor$ ,之后将 $sum \% n$ 个数加一,即可得到满足题目的解。 注意 $sum = 0$ 的时候使用 $mean$ 进行填充。 ```c++ class Solution { public: std::vector<int> missingRolls(std::vector<int>& rolls, int mean, int n) { int sum = mean * (rolls.size() + n); for (auto &num : rolls) sum -= num; if (sum < n || 6 * n < sum) return {}; if (sum == 0) return std::vector<int>(n, mean); int num = sum / n, remainder = sum % n; std::vector<int> res(n); for (int i = 0; i < n; i++) res[i] = num + (i < remainder); return res; } }; ``` - 时间复杂度:$O(m + n)$ ,其中 $m$ 为 `rolls` 数组的长度, $n$ 为缺失的观测数据个数。 - 空间复杂度:$O(1)$ ,除了结果以外只需要常数级的空间。 最后修改:2024 年 05 月 27 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏