2028. 找出缺失的观测数据

news2024/11/15 11:55:58

问题描述

现有一份 n + m 次投掷单个六面骰子的观测数据,骰子的每个面从 1 到 6 编号。观测数据中缺失了 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 。

提示

  • m == rolls.length
  • 1 <= n, m <= 10^5
  • 1 <= rolls[i], mean <= 6

介绍

missingRolls函数用于在已知骰子点数、目标平均值和缺失骰子数量的情况下,计算出缺失的骰子点数。这个函数确保所有骰子的总平均值(已知和缺失的)与给定的平均值匹配。

代码分析

int* missingRolls(int* rolls, int rollsSize, int mean, int n, int* returnSize) {
    // m = rollsSize
    int* res = (int*)malloc(sizeof(int) * n);
    int* resNULL = (int*)malloc(sizeof(int) * n);
    int totalNum = n + rollsSize;
    int total = totalNum * mean;
    int totalRolls = 0, totalLost = 0;
    for (int i = 0; i < rollsSize; i++)
    {
        totalRolls += rolls[i];
    }
    totalLost = total - totalRolls;
    if(totalLost < n || totalLost > 6 * n) // 骰子无法组合出
    {
        *returnSize = 0;
        return resNULL;
    }
    for (int i = 0; i < n; i++)
    {
        res[i] = totalLost / (n - i);
        totalLost -= res[i];
    }
    if(totalLost != 0)
    {
        *returnSize = 0;
        return resNULL;
    }
    *returnSize = n;
    return res;
}

int main(void)
{
    int rolls[] = {3, 2, 4, 3};
    int rollsSize = sizeof(rolls) / sizeof(rolls[0]);
    int mean = 4;
    int n = 2;
    int returnSize = 0;
    int* res = missingRolls(rolls, rollsSize, mean, n, &returnSize);
    printf("returnSize = %d", returnSize);
    for (size_t i = 0; i < returnSize; i++)
    {
        printf("%d", res[i]);
    }
}

详细分析

  1. 输入参数:

    • rolls: 已知的骰子点数组。
    • rollsSize: rolls数组的大小。
    • mean: 总骰子点数的目标平均值。
    • n: 缺失的骰子数量。
    • returnSize: 存储返回数组大小的指针。
  2. 内存分配:

    • res: 存储结果(缺失骰子点数)的数组。
    • resNULL: 在错误情况下返回的数组。
  3. 计算:

    • totalNum: 总的骰子数量(已知 + 缺失)。
    • total: 达到给定平均值所需的总点数。
    • totalRolls: 已知骰子的点数和。
    • totalLost: 为了达到总点数所需的缺失点数。
  4. 验证:

    • 检查缺失点数(totalLost)是否在可行范围内(n6 * n之间)。
    • 如果不在范围内,设置returnSize为0并返回resNULL
  5. 分配缺失点数:

    • 平均分配缺失点数(totalLost)到缺失的骰子中。

    在我们尝试找到缺失的骰子点数时,目标是使得这些点数加上已知的点数,总和能够达到指定的平均值。下面详细解释如何平均分配缺失点数。为了达到这一目标,我们需要确保以下几点:

    1. 计算缺失的总点数:首先,我们计算出总需要的点数 total,然后减去已知骰子点数的总和 totalRolls,得到缺失的点数总和 totalLost
    2. 验证可行性:检查 totalLost 是否在可能的范围内,即 n(所有缺失骰子最小可能总和)到 6 * n(所有缺失骰子最大可能总和)之间。如果不在这个范围内,则返回一个空数组。
    3. 均匀分配点数:将 totalLost 尽可能均匀地分配到每一个缺失骰子中。

    分配逻辑如下:假设我们已经确定了 totalLost 和缺失的骰子数量 n,我们可以按照以下步骤分配点数:

    1. 初始分配

      • 每一个缺失的骰子平均分配 totalLost / n 的整数部分。
      • 将剩余的部分分配给剩下的骰子。
    2. 逐个调整

      • 从每一个骰子上分配 totalLost / n 的整数部分。
      • 更新 totalLost,减去已经分配的点数。
      • 对于剩余的骰子,继续进行同样的操作,直到分配完成。

    假设 totalLost = 12n = 3,我们按以下步骤分配:

    • 首先,每个骰子平均应该分配 12 / 3 = 4
    • 第一个骰子分配 4,剩余 totalLost = 12 - 4 = 8
    • 第二个骰子分配 4,剩余 totalLost = 8 - 4 = 4
    • 第三个骰子分配 4,剩余 totalLost = 4 - 4 = 0

    所有骰子分配完成,结果为 [4, 4, 4]

示例

示例 1

输入:rolls = [3, 2, 4, 3], mean = 4, n = 2
计算步骤:

  1. total = (2 + 4) * 4 = 24
  2. totalRolls = 3 + 2 + 4 + 3 = 12
  3. totalLost = 24 - 12 = 12
  4. 检查 totalLost[2, 12] 之间,合法。
  5. 分配 totalLost = 122 个骰子:
    • 第一个骰子:12 / 2 = 6
    • 第二个骰子:6
  6. 结果为 [6, 6]
示例 2

输入:rolls = [1, 5, 6], mean = 3, n = 4
计算步骤:

  1. total = (4 + 3) * 3 = 21
  2. totalRolls = 1 + 5 + 6 = 12
  3. totalLost = 21 - 12 = 9
  4. 检查 totalLost[4, 24] 之间,合法。
  5. 分配 totalLost = 94 个骰子:
    • 第一个骰子:9 / 4 = 2(余1)
    • 第二个骰子:7 / 3 = 2(余1)
    • 第三个骰子:5 / 2 = 2(余1)
    • 第四个骰子:3 / 1 = 3
  6. 结果为 [2, 2, 2, 3]

通过这种方式,我们可以保证分配的骰子点数满足题目要求。

  • 如果分配后有剩余(totalLost != 0),则表示无法准确分配,设置returnSize为0并返回resNULL
  1. 返回结果:
    • 如果成功,设置returnSizen并返回res

时间复杂度

missingRolls函数的时间复杂度是O(m + n),其中mrolls数组的大小,n是缺失的骰子数量。涉及的步骤包括:

  • 计算已知骰子的总和:O(m)。
  • 分配缺失的骰子点数:O(n)。

空间复杂度

函数的空间复杂度是O(n),因为需要分配结果数组resresNULL

结果

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1701101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

当 GIS 遇上 AI 大模型

今年整个 IT 界、甚至科技界最火爆的技术就是 AI 大模型了&#xff0c;没有之一。 以 OpenAI 的 GPT 为代表、国内外一众大模型跟进&#xff0c;形成了百模齐奔的态势。围绕着大模型&#xff0c;各项周边的应用也在快速发展。在 2023 年年底的云栖大会上&#xff0c;论坛标题带…

一款非常好用的python OCR文字识别框架

项目简介 一个文档 OCR 工具包,它具有以下功能: 支持 90 多种语言的 OCR,其基准测试优于云服务 任何语言的行级文本检测 布局分析(表格、图像、标题等检测) 读取顺序检测 它适用于一系列文档(有关更多详细信息,请参阅用法和基准)。 DetectionOCRLayoutReading Order 阅…

大规模敏捷SA(Leading SAFe)证书是什么意思?如何报名,含金量高吗?

大规模敏捷SA(Leading SAFe)证书是什么意思&#xff1f; 常规的敏捷框架适用于中小型项目团队&#xff0c;而且不具有扩展性。基于常规的敏捷框架&#xff0c;SAFe定义了一个可扩展的敏捷框架模型&#xff0c;它适用于大型团队的合作开发&#xff0c;可以提高团队之间的协作性…

vue-3d-loader 加载多个模型

需求 1、在使用three.js进行开发的过程中&#xff0c;需要列表加载多个模型&#xff0c;并根据需要多模型进行加载。 2、当鼠标移动到图片上去的时候&#xff0c;开始加载模型&#xff0c; 模型进行加载和展示。 3、在制作3d沉浸式商城时&#xff0c;需要根据需求&#xff0…

Easy IP + DNAT(服务器NAT转换)

第一章 Easy IP 1.1 一般家庭和企业使用的地址转换方式 直接使用出接口的地址做转换Easy IP适用于小规模居于网中的主机访问Internet的场景如&#xff1a;家庭、小型网吧、小型办公室中&#xff0c;这些地方内部主机不多&#xff0c;出接口可以通过拨号方式获取一个临时公网I…

用PhpStudy在本地电脑搭建WordPress网站教程(2024版)

对新手来说&#xff0c;明白了建站3要素后&#xff0c;如果直接购买域名、空间去建站&#xff0c;因为不熟练&#xff0c;反复测试主题、框架、插件等费时费力&#xff0c;等网站建成可能要两三个月&#xff0c;白白损失这段时间的建站费用。那么新手怎么建测试网站来练手呢&am…

会声会影破解版百度云(附安装教程) 会声会影下载免费中文版 会声会影2024激活码,注册机

会声会影是一款功能强大的视频与电影编辑软件&#xff0c;它拥有出色的色彩校正和视频氛围调整工具。这款软件对颜色、平度HSL调谐、色调曲线以及波形范围等细微变化有着敏锐的感知&#xff0c;能够轻松实现颜色的精确移动和校正。此外&#xff0c;会声会影还提供了丰富的功能&…

做抖音小店不懂这四个“重点”!那就别怪你的店铺,做不长久!

我相信大家做抖音小店&#xff0c;都去抖音刷过知识点&#xff0c;也去浏览器学习过技巧 但在这里&#xff0c;我给大家泼盆冷水 方法再多&#xff01;这四点不搞明白&#xff0c;那你的店铺出几天单&#xff0c;也就再也做不起来了 哪四点&#xff1f;请认真的看下去&#…

如何将一个JavaEE的SDK依赖到Android中

1. 前言 最近有个需求&#xff0c;需要集成阿里的一个SDK : 通义听悟&#xff0c;但是这个SDK是专门给Web端JavaEE使用的&#xff0c;所以导致接入后&#xff0c;运行报错&#xff0c;有兼容性问题&#xff0c;该如何解决&#xff0c;使其能在Android中正常运行呢 ? 2. 添加…

舞蹈工作室会员服务预约门店管理系统小程序的作用是什么

舞蹈涵盖少儿、街舞、芭蕾、拉丁等多个细分类目&#xff0c;舞蹈工作室除了商演外&#xff0c;内部还有学员培训教育等&#xff0c;提高营收和提升服务效率是商家一直需要思考的问题&#xff0c;线上化程度加深&#xff0c;需要满足客户个性化需求且快速完成流程。 运用【雨科…

windows11下,使用工具验证下载的iso文件完整性

windows11下&#xff0c;要验证下载的iso文件是否正常&#xff0c;可以使用工具生成md5值&#xff0c;再与下载源提供的md5值进行比较&#xff0c;相同&#xff0c;说明下载的正常。 命令如下&#xff1a; certutil -hashfile iso文件名 md5 如下面的例子&#xff0c;生成d…

VGG论文解析—Very Deep Convolutional Networks for Large-Scale Image Recognition

VGG论文解析—Very Deep Convolutional Networks for Large-Scale Image Recognition -2015 研究背景 大规模图像识别的深度卷积神经网络 VGG&#xff08;牛津大学视觉几何组&#xff09; 认识数据集&#xff1a;ImageNet的大规模图像识别挑战赛 LSVRC-2014&#xff1a;Image…

【EI会议】2024年互联网技术与环境工程国际会议(IACITEE 2024)

【EI会议】2024年互联网技术与环境工程国际会议&#xff08;IACITEE 2024&#xff09; 2024 International Conference on Internet Technology and Environmental Engineering 互联网技术与环境工程国际会议&#xff08;IACITEE 2024&#xff09;将在重庆举行&#xff0c;主…

R包显示颜色条

方式1 rm(listls()) ncolors 5 data data.frame(valuerep(5,ncolors)) # 一定要加入这个结果的 colors colorRampPalette(c("blue","red"))(nrow(data)) #colors c(#0000FF,#3F00BF,#7F007F,#BF003F,#FF0000) barplot(data$value,colcolors,names.arg …

高光谱成像技术简介,怎么选择成像方案?

目录 一、什么是光谱&#xff1f;二、光谱和光谱分析方法的类型三、多光谱和高光谱的区别四、高光谱在水果品质检测中的应用1. 高光谱成像系统2. 高光谱图像的获取方式3. 高光谱图像处理与分析4. 在水果品质检测中的应用总结 五、针对自己的应用场景怎么使用高光谱技术六、参考…

【量算分析工具-水平距离】GeoServer改造Springboot番外系列四

水平距离 水平距离计算方式&#xff0c;我目前接触到的有四种&#xff1a;Flat Earth距离、大圆路径距离&#xff08;Haversine公式&#xff09;、JTS库方法&#xff08;黑盒&#xff09;、测地距离&#xff08;Vincenty公式&#xff09;。 说明&#xff1a;这里的EARTH_RADIUS…

30多万汉字词语押韵查询ACCESS\EXCEL数据库

押韵&#xff0c;也作“压韵”。作诗词曲赋等韵文时在句末或联末用同韵的字相押&#xff0c;称为押韵。诗歌押韵&#xff0c;使作品声韵和谐&#xff0c;便于吟诵和记忆&#xff0c;具有节奏和声调美。旧时押韵&#xff0c;要求韵部相同或相通&#xff0c;也有少数变格。现代新…

Hadoop3:HDFS中NameNode和SecondaryNameNode的工作机制(较复杂)

一、HDFS存储数据的机制简介 HDFS存储元数据(meta data)的时候 结果&#xff0c;记录在fsImage文件里 过程&#xff0c;记录在Edits文件里 同时fsImageEdits最终结果&#xff0c;这个最终结果&#xff08;fsImageEdits&#xff09;会保存一份在内存中&#xff0c;为了提升性能…

JVM 常见配置参数

JVM 配置常见参数 Java虚拟机的参数&#xff0c;在启动jar包的时候通过java 命令指定JVM参数 -options表示Java虚拟机的启动参数&#xff0c;class为带有main()函数的Java类&#xff0c;args表示传递给主函数main()的参数。 一、系统查看参数: -XX:PrintVMOptions可以在程序…

ES的安装以及配置+ik分词

环境&#xff1a;windows10、ES&#xff08;8.13.3&#xff09;、Kibana&#xff08;8.13.3&#xff09;、Logstash&#xff08;8.13.3&#xff09;、ik&#xff08;8.13.3&#xff09; 1.下载安装ES Download Elasticsearch | ElasticDownload Elasticsearch or the complet…