leetcode算法题--飞机座位分配概率

原题链接:https://leetcode-cn.com/problems/airplane-seat-assignment-probability/

假设有n个人,即n个座位,当第1个人入座时有三种情况

  1. 坐在第1位,2~n都正常入座
  2. 坐在第n位,2~n-1都正常入座,n坐在第1位
  3. 坐在第2~n-1位,此时后面的座位会受到影响

情况1和情况2出现的概率为1/n,情况3出现的概率为(n-2)/n

对于情况3,假设第1人坐在第2位上,则其实对于第2个人来说,此时问题规模为n-1(1和3 ~ n),其实分析后发现,当2坐在第1位时,3 ~ n都会正常入座,和第1位本来就是2的座位效果相同。那么我们如果把座位1看做本来就是2的座位,那么情况就变成了问题规模为n-1的原问题了,于是有递推式:

f(n)=1/n+(n-2)/n*f(n-1)

由递推式我们可以写出递归代码:

double nthPersonGetsNthSeat(int n) {
    if(n==1) return 1.0;
    return 1.0/n+(n-2.0)/n*nthPersonGetsNthSeat(n-1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值