1227.飞机座位分配概率
https://leetcode-cn.com/problems/airplane-seat-assignment-probability/
只有当n=1时,一定会坐到自己的位置
其他情况下 ,要么就是坐对位置,要么就是坐错位置,所以概率为0.5。
double nthPersonGetsNthSeat(int n){
//要么就是坐对位置,要么就是坐错位置,除了n=1的时候概率为1
return n==1?1.0:0.5; //注意这里是== 而不是=
}
470.用rand7()实现rand10()
https://leetcode-cn.com/problems/implement-rand10-using-rand7/
已知 rand N() 可以等概率的生成[1, N]范围的随机数
那么:
(rand X() - 1) × Y + rand Y() ==》 可以等概率的生成[1, X * Y]范围的随机数
即实现了 rand XY()
int rand10() {
while(true)
{
int num=(rand7()-1)*7+rand7(); //等概率生产[1,49]范围的随机数
if(num<=40)return num%10+1; //拒绝采样,并返回[1,10]范围的随机数
}
}
LCP 11.期望个数统计
https://leetcode-cn.com/problems/qi-wang-ge-shu-tong-ji/
本题实质是就是统计数组中不同元素的个数。
int expectNumber(int* scores, int scoresSize){
int hash[1000001]={0};int sum=0; //初始化哈希表
for(int i=0;i<scoresSize;i++)
{
hash[scores[i]]++;} //统计每个数出现的次数
for(int j=0;j<1000001;j++){
if(hash[j]!=0) //不止出现一个的
sum++;
}return sum;