栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode-2028. 找出缺失的观测数据

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode-2028. 找出缺失的观测数据

leetcode-2028. 找出缺失的观测数据

题源思路代码

pythonjavaCJavascript

题源

2028. 找出缺失的观测数据 思路

刚开始我用了错误的思路(是错误的哦,看看就可以了):先算出剩余数的平均值,然后再在平均值里面把小数取出来,算剩余的和(用剩余的小数乘以缺失的n份),然后就可以得到平均多少个里面有一个多一。我说的不太清楚,也没有关系,反正这是一种错误思想。因为少考虑无限穷小数。正确的思想:

    算出缺失的n份中,剩余的总数nSum;当nSum大于最大点数6和n的相乘或者nSum小于最小点数1和n的相乘的时候,返回空数组;(为什么这样呢?因为最好的情况就是n份都是6,然后你都大于了,然后就说明其中有一份点数为7,故不成立,最坏情况同理。);算出在n份中平均的点数nMeanInt,和分完n份的剩余点数rest;然后输出的前面rest个元素的值为nMeanInt + 1,rest个元素之后的值为nMeanInt的数组。
代码 python
class Solution:
    def missingRolls(self, rolls: List[int], mean: int, n: int) -> List[int]:
        nSum = (len(rolls) + n) * mean - sum(rolls)
        if nSum > 6 * n or nSum < n:
            return []
        rest = nSum % n
        nMean = int(nSum/n)
        return [nMean for _ in range(n - rest)] + [nMean + 1 for _ in range(rest)]

执行用时:112 ms, 在所有 Python3 提交中击败了65.43%的用户
内存消耗:19.6 MB, 在所有 Python3 提交中击败了24.69%的用户

java
class Solution {
    public int[] missingRolls(int[] rolls, int mean, int n) {
        int nSum = (rolls.length + n) * mean - Arrays.stream(rolls).sum();
        if(nSum > 6 * n || nSum < n) return new int[0];
        int rest = nSum % n, nMeanInt = nSum / n;
        int[] arr = new int[n];
        Arrays.fill(arr, 0, rest, nMeanInt + 1);
        Arrays.fill(arr, rest, n, nMeanInt);
        return arr;
    }
}

执行用时:14 ms, 在所有 Java 提交中击败了6.31%的用户
内存消耗:56.7 MB, 在所有 Java 提交中击败了45.05%的用户

C
int sum(int *arr, int arrSize){
    int sum = 0;
    for(int i = 0; i < arrSize; i++) sum += arr[i];
    return sum;
}

int *createIntArr(int len, int value, int *returnSize){
    *returnSize = len;
    int* result = (int *)malloc(sizeof(int) * len);
    for(int i = 0; i < len; i++) result[i] = value; 
    return result;
}

int* missingRolls(int* rolls, int rollsSize, int mean, int n, int* returnSize){
    int nSum = (rollsSize + n) * mean - sum(rolls, rollsSize);
    if( nSum > 6 * n || nSum < n){
        int *nullArr = createIntArr(0, 0, returnSize);
        return nullArr;
    }
    int rest = nSum % n, nMeanInt = nSum / n;
    int *result = createIntArr(n, nMeanInt, returnSize);
    for(int i = 0; i < rest; i++) result[i] += 1;
    return result;
}

执行用时:732 ms, 在所有 C 提交中击败了68.18%的用户
内存消耗:86.2 MB, 在所有 C 提交中击败了83.36%的用户

Javascript
const sum = (arr) => {
    let sum1 = 0
    for(let num of arr){
        sum1 += num
    }
    return sum1
}

var missingRolls = function(rolls, mean, n) {
    const nSum = (rolls.length + n) * mean - sum(rolls)
    if(nSum > 6 * n || nSum < n) return []
    const [rest, nMeanInt] = [nSum % n, Math.floor(nSum / n)]
    let result = new Array(n).fill(nMeanInt)
    result.fill(nMeanInt + 1, 0, rest)
    return result
};

执行用时:276 ms, 在所有 Javascript 提交中击败了88.89%的用户
内存消耗:59.6 MB, 在所有 Javascript 提交中击败了88.89%的用户

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781547.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号