【刷题日记】2028. 找出缺失的观测数据

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

【刷题日记】2028. 找出缺失的观测数据

本次刷题日记的第 12 篇,力扣题为:2028. 找出缺失的观测数据赛中等

一、题目描述:

稍微看完题目,第一反应,这是一个数学题,实际仔细看完之后,这确实又是一个数学题,只是需要我们用编程的方式来实现而已 , 那我们一起来分析一下

二、思路分析:

1、这道题考察了什么思想?你的思路是什么?

按照题目中给出的信息,我们可以知道有这些重要的点:

  • 给出的 rolls 数组中的元素和我们需要补充的元素数据范围都是 1 - 6
  • 现在我们是知道平均值 mean,知道 n+m 的数量,来计算丢失的数据,也可以是找到整个观测数据
  • 找出 n 对应的数组,可能会有很多个版本,我们只需要输出一个版本就可以了

我们可以按照示例来推理一下:

示例:rolls = [1,5,6], mean = 3, n = 4

2028. 找出缺失的观测数据

根据上述的模拟,我们知道,核心点就是计算能给到 n 个数字的总和 remainSum ,如果 remainSum 小于 n 或者 remainSum 大于 6*n ,则是不满足我们题意的

当得到符合要求的 remainSum 时,我们就可以来分配 n 个数字对应的值了,分配的逻辑也是很简单的

扫描二维码关注公众号,回复: 13746555 查看本文章

当得到符合要求的 remainSum 时 , remainSum /n 一定是 小于等于 6 的,且如果是等于的情况,一定是没有余数的

则,我们的分配原则就是,将 remainSum % n 得到的余数,分成多分追加到每一个平均数上即可

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码,就按照咱们数学的方式来处理即可

编码如下:

func missingRolls(rolls []int, mean int, n int) []int {
    remainSum := mean * (len(rolls) + n )
    for _,num := range rolls {
        remainSum = remainSum - num
    }

    // 如果剩余的数据不在 n - 6*n 之间,那么就是找不到缺失的数据
    if remainSum < n || remainSum > 6 * n {
        return nil
    }

    // 开始构造数据,此处的 remainSum 一定在  n - 6*n 之间 , 则 remainSum / n 一定是 shang 小于 6 ,再加上 yushu
    // 则我们可以构造这么一个版本:yushu 个 shang+1 , 和 (n-yushu)个 shang 即可
    shang,yushu := remainSum/n , remainSum %n

    res := make([]int, n)
    for i:=0;i<n;i++{
        res[i] = shang
        if i < yushu{
            res[i]++
        }
    }

    return res
}
复制代码

实际编码也确实是对于上面思想的翻译,翻译出来的代码如上,主要是要考虑好 n 中能承载的数据范围,以及如何去分配 n 个数据的值

四、总结:

不难理解,此处我们的循环是 n+m ,因此时间复杂度是 O(n+m) , 空间复杂度是 O(1)

原题地址:2028. 找出缺失的观测数据

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

猜你喜欢

转载自juejin.im/post/7079621946685521933