文章目录
一. 今天就不将概念了,直接上题
二. 题解
2.1 飞机座位分配概率
2.1.1 题目链接
2.1.2 思路分析:
这道题我们可以通过分析计算得到这样一个公式:
推导过程
代码如下:
double nthPersonGetsNthSeat(int n){
return n == 1 ? (double)1.0 : (double)0.5;
}
2.2 期望个数统计
2.2.1 题目链接
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 题目链接
2.3.2 思路分析
题目以及给了rand7()函数,它可以随机生成1~7的数字,并且每个数字的出现概率相同,很明显,它是一个古典概率模型。
用rand7()构造rand10()
- 首先我们知道1~7中有四个奇数三个偶数,那我们拒绝7,在1 ~ 6中偶数和奇数出现的概率相同为0.5,现在我们拒绝6和7,只剩下1 ~ 5,每个数据出现的概率为0.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;
}