首页 > 其他分享 >力扣:2028. 找出缺失的观测数据

力扣:2028. 找出缺失的观测数据

时间:2024-05-27 21:04:11浏览次数:27  
标签:平均值 int 投掷 rolls 力扣 sum 2028 缺失 mean

2028. 找出缺失的观测数据

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

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

返回一个长度为 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 。

提示:

  • m == rolls.length
  • 1 <= n, m <= 105
  • 1 <= rolls[i], mean <= 6

1、模拟

class Solution {
    public int[] missingRolls(int[] rolls, int mean, int n) {
        int len = rolls.length + n;
        int sum = 0;
        for(int i : rolls){
            sum += i;
        }
        int x = mean * len - sum;//计算缺失值总和
        //把x分为n份处于1到6的数
        if(6*n<x||x<n)return new int[]{};//如果全分6还剩,或是全分1都不够
        int[] ans = new int[n];
        int idx = 0;
        while(x-- > 0){//一个一个分
            ans[idx++] += 1;
            idx %= n;
        }
        return ans;
    }
}

2、优化模拟

class Solution {
    public int[] missingRolls(int[] rolls, int mean, int n) {
        int len = rolls.length + n;
        int sum = 0;
        for(int i : rolls){
            sum += i;
        }
        int x = mean * len - sum;//计算缺失值总和
        //把x分为n份处于1到6的数
        if(6*n<x||x<n)return new int[]{};//如果全分6还剩,或是全分1都不够
        int[] ans = new int[n];
        int idx = 0;
        int zheng = x/n;//算出x可以分为zheng个6
        int yu = x%n;//分完zheng个6后,还剩yu
        Arrays.fill(ans,zheng);//将数组统一赋值为zheng
        while(yu-- > 0){//将剩下的一个一个分
            ans[idx++] += 1;
        }
        return ans;
    }
}

标签:平均值,int,投掷,rolls,力扣,sum,2028,缺失,mean
From: https://blog.csdn.net/icbbm/article/details/139247269

相关文章

  • 力扣刷题记录: 2134. 最少交换次数来组合所有的 1 Ⅱ
        这道题是第275场周赛的Q2,LC竞赛分为1748,主要考察滑动窗口。说实话这道题要想到是滑动窗口就很简单,否则就根本无从下手。方法一.滑动窗口(时间超过62.53%C++用户)        处理环形数组的一个很有效的技巧就是“追加”,把整个nums数组追加到nums数组后面,......
  • 2005-2022年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据(
    2005-2022年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据(无缺失)1、时间:2005-2022年2、来源:国家统计局、统计年鉴3、范围:31省4、指标:全体居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出5、缺失情况:无缺失6、指标解释:居民人均......
  • leetcode力扣 300. 最长递增子序列
    给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是[2,3,7,101......
  • 力扣 32. 最长有效括号 python AC
    动态规划classSolution:deflongestValidParentheses(self,s):s=''+ssize=len(s)dp=[0]*sizeforiinrange(2,size):ifs[i]==')':ifs[i-1]=='(':......
  • leetcode力扣 1004. 最大连续1的个数 III
    给定一个二进制数组nums和一个整数k,如果可以翻转最多k个0,则返回数组中连续1的最大个数。示例1:输入:nums=[1,1,1,0,0,0,1,1,1,1,0],k=2输出:6解释:[1,1,1,0,0,1,1,1,1,1,1],翻转两个0后,最长的子数组长度为6。示例2:输入:nums=[0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1......
  • 力扣数组题分享
    文章目录前言二分查找思路二分法第一种写法二分法第二种写法螺旋矩阵II思路结尾前言在学习数据结构的过程中,我通过力扣整理了一些常见的数据结构数组题。这些题目帮助我回顾了学习过程中的关键知识点。二分查找力扣题目704.二分查找给定一个n个元素有序......
  • leetcode力扣 2024. 考试的最大困扰度
    一位老师正在出一场由n道判断题构成的考试,每道题的答案为true(用'T'表示)或者false(用'F'表示)。老师想增加学生对自己做出答案的不确定性,方法是最大化有连续相同结果的题数。(也就是连续出现true或者连续出现false)。给你一个字符串answerKey,其中answerKey[i]是第i......
  • 2831. 找出最长等值子数组力扣解法和辅助图
    题目描述:给你一个下标从0开始的整数数组nums和一个整数k。如果子数组中所有元素都相等,则认为子数组是一个等值子数组。注意,空数组是等值子数组。从nums中删除最多k个元素后,返回可能的最长等值子数组的长度。子数组是数组中一个连续且可能为空的元素序列......
  • leetcode力扣 213. 打家劫舍 II
    计划偷窃沿街的房屋是小偷的计划。在这个地方,所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。但是,相邻的房屋都装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。为了计算在不触动警报装置的情况下,今晚能够偷窃到的最高金额,我们......
  • 【每周例题】力扣 C++ 字符串相乘
    字符串相乘题目字符串相乘题目分析1.首先,题目上标出了一条:注意:不能使用任何内置的BigInteger库或直接将输入转换为整数。这就是这道题的难度所在2.这样子的话,我们可以从手写乘法计算来寻找思路: ①首先我们需要将各位相乘的结果放入数组ansArr中,我们使用双重for循环计算......