[题解]《算法零基础100讲》(第30讲) 概率与统计

一. 今天就不将概念了,直接上题

二. 题解

2.1 飞机座位分配概率

2.1.1 题目链接

1227. 飞机座位分配概率

2.1.2 思路分析:

  这道题我们可以通过分析计算得到这样一个公式:
在这里插入图片描述

推导过程

代码如下:

double nthPersonGetsNthSeat(int n){
    return n == 1 ? (double)1.0 : (double)0.5;
}

2.2 期望个数统计

2.2.1 题目链接

LCP 11. 期望个数统计

2.2.2 思路分析

  题目已经告诉了我们计算期望的公式,我们有期望的可加性也可以推导出:
在这里插入图片描述
由此我们可以发现,E(X)与数组的长度无关,至于数组中,不同数据的数量有关。

代码如下:

int expectNumber(int* scores, int scoresSize){
    int p[1000001] = { 0 };
    int dif = 0;
    int max = 0;
    for(int i = 0; i < scoresSize; i++){
        p[scores[i]]++;
        if(max < scores[i]){
            max = scores[i];
        }
    }
    for(int i = 0; i <= max; i++){
        if(p[i]){
            dif++;
        }
    }
    return dif;
}

2.3 470. 用 Rand7() 实现 Rand10()

2.3.1 题目链接

470. 用 Rand7() 实现 Rand10()

2.3.2 思路分析

  题目以及给了rand7()函数,它可以随机生成1~7的数字,并且每个数字的出现概率相同,很明显,它是一个古典概率模型。
用rand7()构造rand10()

  1. 首先我们知道1~7中有四个奇数三个偶数,那我们拒绝7,在1 ~ 6中偶数和奇数出现的概率相同为0.5,现在我们拒绝6和7,只剩下1 ~ 5,每个数据出现的概率为0.2。
  2. 现在我们将上面两种得到的数据用两个变量保存first和second,当出现奇数时,我们返回second,偶数时我们返回second+5。

代码如下:

int rand10() {
    int first, second;
    while((first = rand7()) > 6);
    while((second = rand7()) > 5);
    return (first & 1) == 1 ? second : 5 + second;
}

三. 对应练习

1093. 大样本统计

剑指 Offer 60. n个骰子的点数

837. 新21点

1467. 两个盒子中球的颜色数相同的概率(困难)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

友人苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值