列表

详情


2028. 找出缺失的观测数据

现有一份 n + m 次投掷单个 六面 骰子的观测数据,骰子的每个面从 16 编号。观测数据中缺失了 n 份,你手上只拿到剩余 m 次投掷的数据。幸好你有之前计算过的这 n + m 次投掷数据的 平均值

给你一个长度为 m 的整数数组 rolls ,其中 rolls[i] 是第 i 次观测的值。同时给你两个整数 meann

返回一个长度为 n 的数组,包含所有缺失的观测数据,且满足这 n + m 次投掷的 平均值 mean 。如果存在多组符合要求的答案,只需要返回其中任意一组即可。如果不存在答案,返回一个空数组。

k 个数字的 平均值 为这些数字求和后再除以 k

注意 mean 是一个整数,所以 n + m 次投掷的总和需要被 n + m 整除。

 

示例 1:

输入:rolls = [3,2,4,3], mean = 4, n = 2
输出:[6,6]
解释:所有 n + m 次投掷的平均值是 (3 + 2 + 4 + 3 + 6 + 6) / 6 = 4 。

示例 2:

输入:rolls = [1,5,6], mean = 3, n = 4
输出:[2,3,2,2]
解释:所有 n + m 次投掷的平均值是 (1 + 5 + 6 + 2 + 3 + 2 + 2) / 7 = 3 。

示例 3:

输入:rolls = [1,2,3,4], mean = 6, n = 4
输出:[]
解释:无论丢失的 4 次数据是什么,平均值都不可能是 6 。

示例 4:

输入:rolls = [1], mean = 3, n = 1
输出:[5]
解释:所有 n + m 次投掷的平均值是 (1 + 5) / 2 = 3 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<int> missingRolls(vector<int>& rolls, int mean, int n) { } };

rust 解法, 执行用时: 49 ms, 内存消耗: 3.5 MB, 提交时间: 2024-05-27 09:20:54

impl Solution {
    pub fn missing_rolls(rolls: Vec<i32>, mean: i32, n: i32) -> Vec<i32> {
        let rem = mean * (n + rolls.len() as i32) - rolls.iter().sum::<i32>();
        if rem < n || rem > n * 6 {
            return vec![];
        }
        let avg = rem / n;
        let extra = (rem % n) as usize;
        let mut ans = vec![avg + 1; extra];
        ans.extend(vec![avg; (n as usize) - extra]);
        ans
    }
}

cpp 解法, 执行用时: 106 ms, 内存消耗: 117.5 MB, 提交时间: 2024-05-27 09:20:42

class Solution {
public:
    vector<int> missingRolls(vector<int>& rolls, int mean, int n) {
        int rem = mean * (n + rolls.size()) - reduce(rolls.begin(), rolls.end());
        if (rem < n || rem > n * 6) {
            return {};
        }
        int avg = rem / n, extra = rem % n;
        vector<int> ans(extra, avg + 1);
        ans.insert(ans.end(), n - extra, avg);
        return ans;
    }
};

golang 解法, 执行用时: 204 ms, 内存消耗: 8.4 MB, 提交时间: 2023-05-10 10:41:39

func missingRolls(rolls []int, mean, n int) []int {
    missingSum := mean * (n + len(rolls))
    for _, roll := range rolls {
        missingSum -= roll
    }
    if missingSum < n || missingSum > n*6 {
        return nil
    }

    quotient, remainder := missingSum/n, missingSum%n
    ans := make([]int, n)
    for i := range ans {
        ans[i] = quotient
        if i < remainder {
            ans[i]++
        }
    }
    return ans
}

javascript 解法, 执行用时: 280 ms, 内存消耗: 60.1 MB, 提交时间: 2023-05-10 10:41:24

/**
 * @param {number[]} rolls
 * @param {number} mean
 * @param {number} n
 * @return {number[]}
 */
var missingRolls = function(rolls, mean, n) {
    const m = rolls.length;
    const sum = mean * (n + m);
    let missingSum = sum;
    for (const roll of rolls) {
        missingSum -= roll;
    }
    if (missingSum < n || missingSum > 6 * n) {
        return [];
    }
    const quotient = Math.floor(missingSum / n), remainder = missingSum % n;
    const missing = new Array(n).fill(0);
    for (let i = 0; i < n; i++) {
        missing[i] = quotient + (i < remainder ? 1 : 0);
    }
    return missing;
};

java 解法, 执行用时: 3 ms, 内存消耗: 57.9 MB, 提交时间: 2023-05-10 10:41:12

class Solution {
    public int[] missingRolls(int[] rolls, int mean, int n) {
        int m = rolls.length;
        int sum = mean * (n + m);
        int missingSum = sum;
        for (int roll : rolls) {
            missingSum -= roll;
        }
        if (missingSum < n || missingSum > 6 * n) {
            return new int[0];
        }
        int quotient = missingSum / n, remainder = missingSum % n;
        int[] missing = new int[n];
        for (int i = 0; i < n; i++) {
            missing[i] = quotient + (i < remainder ? 1 : 0);
        }
        return missing;
    }
}

python3 解法, 执行用时: 72 ms, 内存消耗: 21.4 MB, 提交时间: 2023-05-10 10:41:00

class Solution:
    def missingRolls(self, rolls: List[int], mean: int, n: int) -> List[int]:
        missingSum = mean * (n + len(rolls)) - sum(rolls)
        if not n <= missingSum <= n * 6:
            return []
        quotient, remainder = divmod(missingSum, n)
        return [quotient + 1] * remainder + [quotient] * (n - remainder)

上一题